Si je mets le répertoire courant/de travail (y naviguant en utilisant cd
) dans un répertoire particulier et que je tape:
rm *.xvg
Que fera cette commande? Est-il vrai que la commande ci-dessus va niquement supprimer les fichiers avec l'extension .xvg
seulement dans le répertoire de travail?
J'étais nerveux à l'idée d'essayer cela avant de demander, car je veux être absolument sûr que la commande ci-dessus ne supprimera que .xvg
fichiers ( SITUÉ DANS LE RÉPERTOIRE DE TRAVAIL .
Oui, rm *.xvg
va niquement supprimer les fichiers avec l'extension spécifiée dans votre répertoire actuel.
Une bonne façon de vous assurer que vous êtes bien dans le répertoire dans lequel vous voulez supprimer vos fichiers est d'utiliser la commande pwd
qui affichera votre répertoire courant et ensuite faire un ls
pour vérifier que vous trouvez les fichiers que vous attendez.
Si vous avez un peu peur de lancer la commande rm
, vous pouvez faire 2 choses:
tapez ls *.xvg
pour voir la liste des fichiers qui seraient affectés par cette commande.
Sauf si vous avez un lot de fichiers, vous pouvez toujours utiliser le -i
Commutateur de ligne de commande pour rm
(existe également pour cp
et mv
). En utilisant rm -i *.xvg
vous inviterait pour chaque fichier individuel s'il était correct de le supprimer, de sorte que vous pouviez être sûr que rien de ce que vous attendiez n'était supprimé. (Ce sera fastidieux si vous avez beaucoup de fichiers :)
Vous n'avez pas besoin de naviguer vers le répertoire, utilisez simplement
rm /some/dir/*.xvg
Dans le cas où vous avez une faute de frappe ou une erreur similaire dans le chemin, où/som/dir n'existe pas:
cd /som/dir
rm *.xvg
supprimera accidentellement tous les fichiers .xvg dans le répertoire courant. La première commande ne le sera pas et vous n'avez pas besoin de revenir en arrière.
Une autre façon serait d'utiliser find:
find /some/dir/ -maxdepth 1 -type f -name "*.xvg" -delete
Oui, rm *.xvg
supprimera uniquement les fichiers se terminant par .xvg
dans votre répertoire actuel. Voici pourquoi.
Lorsque vous tapez une commande comme celle-ci, le travail est réparti 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'arguments prog arg1 arg2 arg3
quand ils démarrent. Dans le cas de rm
, ils sont interprétés comme une liste de noms de fichiers complets à supprimer. Donc, si vous êtes dans un répertoire contenant le fichier foo.bar
, en tapant delete 'foo.*'
aura pour résultat rm: foo.*: No such file or directory
. Notez les guillemets simples autour du modèle de fichier, ils indiquent au Shell de passer l'argument au Shell tel quel.
Cependant, si vous tapez rm *.bar
dans le même répertoire, il supprimera le fichier. Ce qui se passe ici, c'est que votre Shell, qui est le programme que vous utilisez pour taper des commandes, effectue des transformations avant de passer les arguments à la commande. L'un d'eux est appelé "extension de nom de fichier", autrement connu sous le nom de "globbing". Vous pouvez voir une liste des extensions de nom de fichier bash ici . L'une des extensions les plus courantes est *
, qui est étendu aux noms de fichiers dans le répertoire courant.
Un moyen simple de regarder les globs au travail est d'utiliser echo
, qui affiche tous les arguments qui lui sont passés via le Shell. Donc, en tapant echo *
dans le même répertoire affichera foo.bar
. Ainsi, lorsque vous tapez rm *.bar
, ce qui se passe réellement, c'est que le Shell étend la liste des arguments à foo.bar
, puis la transmet à la commande rm
.
Il existe plusieurs façons 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. Taper echo **/*.bar
affichera une liste de tous les fichiers se terminant par .bar
dans tous les sous-dossiers. Donc, en tapant rm **/*.bar
dans bash activé globstar supprimera en effet récursivement tous les fichiers correspondants dans les sous-dossiers.
Commande:
rm ./*.pgm
travaille pour moi
Commander:
rm *.pgm
donne la commande d'erreur (en polonais, traduit):
rm: wrong option - '1'
Use "rm ./-1000.pgm" to delete the file '-1000.pgm'.
Write "rm --help" for information.
dans
bash --version
GNU bash, wersja 4.4.19(1)-release (x86_64-pc-linux-gnu)