Parfois, j'utilise la commande pour supprimer certains fichiers. Par exemple, le nom peut commencer par 'a', je vais donc supprimer avec la commande rm -r a*
, mais je ne veux pas supprimer un autre répertoire par accident. Comment verrouiller un répertoire pour empêcher sa suppression par rm -r
?
Vous pouvez aliaser la commande rm
en rm -i
dans votre shell. Il vous demandera donc de confirmer votre fichier.
Cependant, certains considèrent que cela est nocif. Voir alias rm = “rm -i” considéré comme dangereux? sur Superuser.com
D'autres pensées sont dans Comment puis-je prévenir les rm accidentels -rf /? * sur StackOverflow.com.
Le meilleur conseil est de craindre et de respecter les commandes 'rm -r' ou 'rm -rf' suffisamment pour que, lorsque vous les tapez, vous vous arrêtez et avancez lentement et avec prudence (relisez attentivement la commande plusieurs fois). . Les commandes sont utiles et doivent parfois être utilisées - mais ce n’est pas une bonne idée de tromper le système pour qu’il vous sauve de ce type d’erreur; ce n'est pas une bonne idée de s'habituer à de telles solutions - envisagez de créer de bonnes habitudes qui peuvent être transportées d'une machine à l'autre.
Si vous essayez de supprimer des éléments de manière sélective, vous pouvez utiliser find
.
find . -name "a*" \! -type d -delete
Vous pouvez vérifier ce que vous supprimez en lançant:
find . -name "a*" \! -type d -print
Par exemple, créez quelques répertoires et fichiers:
mkdir -p testDir/a/b
cd testDir
touch Apple.txt banana.txt ant.tx a/antelope.txt a/bus.txt a/b/apostrophe.txt a/b/bug.txt
Pour voir les fichiers et les répertoires:
find . -name "*" -print
résultats:
.
./a
./a/antelope.txt
./a/b
./a/b/apostrophe.txt
./a/bus.txt
./ant.tx
./Apple.txt
./banana.txt
Pour vérifier ce qui est en train d'être supprimé:
find . -name "a*" \! -type d -print
résultats:
./a/antelope.txt
./a/b/apostrophe.txt
./ant.tx
./Apple.txt
Pour supprimer les fichiers:
find . -name "a*" \! -type d -delete
Pour vérifier que seuls les fichiers * ont été supprimés:
find . -name "*" -print
résultats:
.
./a
./a/b
./a/bus.txt
./banana.txt
En plus des autres réponses ici, je vous recommande d'utiliser plus de complétion de tabulation et moins globbing. D'après votre question, il semble que vous essayez de supprimer un seul fichier mais que vous ne voulez pas taper le nom complet. Dans ce cas, au lieu de *
, vous devriez appuyer sur Tab. La complétion par tabulation est beaucoup plus sûre.
Si vous avez réellement l'intention de supprimer plusieurs fichiers dont le nom correspond à un glob, le meilleur moyen, comme cela a déjà été souligné, est de réfléchir à deux fois avant de cliquer sur entrer. En outre, vous pouvez gagner beaucoup de tranquillité d'esprit si vous utilisez une solution de sauvegarde qui sauvegarde toutes les modifications au fur et à mesure que vous les apportez, afin de pouvoir toujours restaurer toute erreur sans risque de perte de données.