web-dev-qa-db-fra.com

Comment puis-je supprimer tous les fichiers avec une extension particulière dans un dossier particulier?

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 .xvgseulement 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 .

39
Andrew

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:

  1. tapez ls *.xvg pour voir la liste des fichiers qui seraient affectés par cette commande.

  2. 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 :)

37
Levon

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 
21
user unknown

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.

3
purzelrakete

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)
1
Adam