Si je définis le répertoire en cours / de travail (en y accédant à l'aide de cd
) vers un répertoire particulier, puis tapez:
rm *.xvg
Que fera cette commande? Est-il vrai que la commande ci-dessus ne supprimera que les fichiers portant l'extension .xvg
uniquement dans le répertoire de travail?
J'avais peur d'essayer cela avant de demander, parce que je veux être absolument sûr que la commande ci-dessus ne supprimera que les .xvg
fichiers SITUÉS DANS LE RÉPERTOIRE DE TRAVAIL .
rm -f {*.xvg,.*.xvg}
supprimer aussi les fichiers cachés. Etrm -R -f {*.xvg,.*.xvg}
pour supprimer aussi les répertoires.Vous n'avez pas besoin de naviguer dans le répertoire, utilisez simplement
Dans le cas où vous avez une faute de frappe ou une erreur similaire dans le chemin, où / som / dir n'existe pas:
supprimera accidentellement tous les fichiers .xvg du répertoire en cours. La première commande ne le fera pas, et vous n’avez pas besoin de recoder.
Une autre manière serait d'utiliser find:
la source
Oui,
rm *.xvg
ne supprimera que les fichiers se terminant par.xvg
votre répertoire actuel. Voici pourquoi.Lorsque vous tapez une commande comme celle-ci, le travail est divisé entre le shell que vous utilisez (supposons bash) et la commande binaire.
Vous pouvez localiser le binaire en tapant
which rm
. Ce petit programme s'occupe de dissocier les fichiers. Des programmes comme celui-ci peuvent être démarrés à partir de la ligne de commande et peuvent lire une liste d'argumentsprog arg1 arg2 arg3
au démarrage. Dans le cas derm
, ils sont interprétés comme une liste de noms de fichiers complets à supprimer. Donc, si vous êtes dans un répertoire contenant le fichierfoo.bar
, la saisiedelete 'foo.*'
aboutira àrm: foo.*: No such file or directory
. Notez les guillemets simples autour du modèle de fichier, ils disent au shell de transmettre l'argument au shell tel qu'il est.Toutefois, si vous tapez
rm *.bar
dans le même répertoire, le fichier sera supprimé. Ce qui se passe ici, c'est que votre shell, qui est le programme que vous utilisez pour taper des commandes, effectue certaines transformations avant de transmettre les arguments à la commande. L'un d'eux s'appelle 'extension de nom de fichier', autrement dit 'globbing'. Vous pouvez voir une liste des extensions de noms de fichiers bash ici . L’une des extensions les plus courantes est celle*
qui est étendue aux noms de fichiers du répertoire en cours.Un moyen simple de voir les globes au travail est d'utiliser
echo
, qui affiche tous les arguments qui lui sont transmis via le shell. Donc, en tapantecho *
dans le même répertoire va sortirfoo.bar
. Ainsi, lorsque vous tapezrm *.bar
, le shell étend la liste des argumentsfoo.bar
, puis le transmet à larm
commande.Il y a des moyens de contrôler le globbing. Dans les versions récentes de bash, par exemple, vous pouvez activer une option appelée globstar qui effectuera une expansion récursive. En tapant, vous
echo **/*.bar
verrez une liste de tous les fichiers se terminant.bar
par tous les sous-dossiers. Donc, en tapantrm **/*.bar
dans globstar enabled bash supprimera effectivement de manière récursive tous les fichiers correspondants dans les sous-dossiers.la source
Commande:
travaille pour moi
Commander:
donne une commande d'erreur (en polonais, traduit):
dans
la source