Je voudrais exécuter une ligne de commande:
cd ~/www/tmp/; rm -P 2*
Mais j'obtiens une erreur s'il n'y a pas de fichiers commençant par 2.
On pourrait penser que je voudrais utiliser -f
, cependant:
-f Attempt to remove the files without prompting for confirmation, regardless of the file's permissions. If the file does not exist, do not display a diagnostic message or modify the exit status to reflect an error.
Et je fais soin de fichier permissions- s'il y a quelque chose de bizarre se passe, je préfère la commande abort. Je veux seulement supprimer les erreurs «n'existe pas».
J'ai regardé d'autres questions avec des `` erreurs rm '' et trouvé ces deux qui semblent (un peu) pertinentes:
Supprimez les fichiers et les répertoires par leur nom. Aucun fichier ou répertoire de ce nom
Mais, je ne comprends pas tout ce qui se passe dans les réponses à cette question, et je ne sais pas si j'en ai besoin?
Le touch
hack suggéré dans cette question:
Rm n'a-t-il pas signalé qu'un fichier est manquant?
Cela semble réalisable, car je ne pense pas que cela me dérange de la performance (mais quel type de performance souhaitez-vous prendre?
Je ne sais pas comment je ferais un if-then
dans la ligne de commande.
Existe-t-il d'autres options pour un nettoyage simple en ligne de commande couper-coller?
Fonctionnerait find -delete
mieux pour mon cas? Si oui, pourquoi?
erreur en question:
rm: 2*: No such file or directory
la source
rm
, vous devrez donc dire ce que c'est.zsh
votre shell interactif? Obtenez-vous uneNo matches found
erreur?2*
à rm au lieu de la développer dans une liste de fichiers. Regardez l'erreur en question: il dit que rm se plaint, pas sh / bas / zsh / ...Réponses:
Pour appeler uniquement
rm -P
pour existants fichiers réguliers dont le nom correspond à un modèle dans un répertoire (mais pas au- dessous):Par exemple,
Pour faire correspondre uniquement les non-répertoires, utilisez
! -type d
à la place de-type f
. La différence est que! -type d
cela serait vrai pour une plus large gamme de types de fichiers (liens symboliques, canaux nommés, sockets, etc.)Étant donné que vous souhaitez être invité à indiquer certaines conditions sur les fichiers trouvés, vous ne devez pas utiliser à la
-delete
place de-exec rm
puisque cela fonctionne commerm -f
.Supprimer
-maxdepth 1
pour laisserfind
apparaître les sous-répertoires récursivement.la source
! -type d
pourrait être plus procherm 2*
, je pense?find ~/www/tmp/ -maxdepth 1 -type f -name '2*' -exec rm -P {} +
-P
aussi l' utiliser .-type f
, mais je ne savais pas comment fairerm
comme ça - donc la suggestion de @ Kusalanada était parfaite, et la différenciation / explication est excellente pour apprendre.rm 2*(.)
en zsh).