Comment supprimer en toute sécurité tous les fichiers avec une extension spécifique (par exemple .bak
) du répertoire actuel et tous les sous-dossiers en utilisant une ligne de commande? Simplement, j'ai peur d'utiliser rm
depuis que je l'ai mal utilisé une fois et maintenant j'ai besoin de conseils.
command-line
files
rm
batch
utilisateur216038
la source
la source
rm *.bak
?rm *.bak
ne fonctionnera pas pour les sous-répertoires.rm *.bak
tous les fichiers se terminant par .bak ne seront supprimés que dans le répertoire actuel. Pour faire également des choses dans les sous-répertoires dont vous avez besoin soit pour manipuler globs, utilisez l'option -r ou utilisez l'exemple find.rm -r *.bak
! Il supprime également les répertoires se terminant.bak
par tout leur contenu.-delete
c'est le dernier argument de votre commande. Si vous le mettez avant l'-name *.bak
argument, il supprimera tout.la source
-delete
drapeaufind
. Vous trouverez plus d’informations dans l’ entrée des manuels GNU permettant de supprimer des fichiers avec find .Exécutez d'abord la commande
shopt -s globstar
. Vous pouvez l'exécuter sur la ligne de commande et cela n'aura d'effet que dans cette fenêtre shell. Vous pouvez le mettre dans votre.bashrc
, et tous les nouveaux obus démarrés le ramasseront. Cette commande a pour effet de créer des**/
fichiers de correspondance dans le répertoire en cours et ses sous-répertoires de manière récursive (par défaut, cela a**/
la même signification que*/
: uniquement dans les sous-répertoires immédiats). Ensuite:(ou
gvfs-trash **/*.bak
ou qu'avez-vous).la source
Supprimer des fichiers n'est pour moi pas quelque chose que vous devriez utiliser
rm
. Voici une alternative:Comme le dit Flimm dans les commentaires:
Alors:
Vous n'avez pas besoin de créer un alias pour cela, car le
trash-cli
paquet fournit une commandetrash
qui fait ce que nous voulons.Comme Eliah Kagan le précise dans de nombreux commentaires, vous pouvez également utiliser cette méthode de manière récursive
find
. Dans ce cas, vous ne pouvez pas utiliser d'alias. Les commandes ci-dessous supposent que vous avez installétrash-cli
. Je résume les commentaires d'Eliah:Cette commande trouve et affiche tous les
.bak
fichiers et liens symboliques situés n'importe où dans le répertoire en cours ou dans ses sous-répertoires ou en dessous.Pour les supprimer, ajoutez un
-exec
avec latrash
commande:-xtype f
sélectionne les fichiers et les liens symboliques vers les fichiers, mais pas les dossiers. Pour supprimer également les dossiers .bak, supprimez cette partie et utilisez-execdir
-la pour éviter lescannot trash non-existent
erreurs de.bak
fichiers dans les.bak
répertoires:la source
rm
pour supprimer des choses" est une déclaration controversée, mais je dois admettre qu'il est souvent plus sage d'utiliser quelque chose qui vous permettra d'annuler des choses.trash-cli
fait la même chose quegvfs-trash
sans la dépendance surgvfs
.find . -name "*.bak" -type f
ce quetrash *.bak
supprime. Est-ce vraiment ce que vous voulez dire? Vous pouvez déplacer des répertoires dans la corbeille avectrash
ougvfs-trash
, maistrash *.bak
ne déplacerez que les fichiers et les répertoires dont le nom se termine.bak
et qui résident immédiatement dans le répertoire en cours. Le shell se développe*.bak
, donctrash *.bak
n'affectera pas les.bak
fichiers des sous-répertoires non nommés.bak
.ls *.bak
(ce que je pense que vous voulez dire) répertorie lestrash *.bak
déchets.find . -name '*.bak' -xtype f -exec trash {} +
supprime tous les.bak
fichiers n'importe où.
. Il ne peut pas utiliser un alias, aussi installeztrash-cli
ou écrivezgvfs-trash
. Voici un exemple.-xtype f
sélectionne les fichiers et les liens symboliques vers les fichiers, mais pas les dossiers. Pour supprimer également des.bak
dossiers , utilisez lafind . -name '*.bak' -execdir trash {} +
méthode qui évite lescannot trash non existent
erreurs de.bak
fichiers dans les.bak
répertoires. N'hésitez pas à utiliser tout cela dans votre réponse.Si vous souhaitez supprimer tous les fichiers d'un certain type, mais seulement 1 dossier "profond" du dossier actuel:
-maxdepth 2 car le répertoire actuel " . " compte comme premier dossier.
la source
Réponse rapide:
Supprimez tous les fichiers portant le nom considéré ou postfix de manière récursive:
find . -name '*.pyc' -type f -delete
Supprimez tous les répertoires avec le nom considéré récursivement:
Un peu moins étroitement contrôlé, mais sur une seule ligne:
[ NOTE ]:
d
est une option de répertoire etf
est une option de fichier.la source
Si vous êtes dans un dépôt Git, vous pouvez utiliser:
Cela supprime les fichiers non suivis et les fichiers dans .gitignore.
la source