2016-08-02 1 views
2

Je dois placer une commande qui va chercher tous les fichiers dans le répertoire courant ainsi que dans ses sous-répertoires - se terminant par ~, et/ou tous les fichiers qui commencent ou se terminent par #. La ligne de commande affichera et effacera tous les fichiers trouvés. Une seule commande est autorisée: non ';' ou '& &' ou d'autres manigances.La commande unix find dans le terminal ne fonctionne pas

voici ma commande:

find . -name "#*" -o -name "*#" -o -name "*~" -print -delete 

mais il efface uniquement les fichiers se terminant par ~

+0

Essayez des guillemets simples au lieu de guillemets doubles pour les jokers de nom. Certains obus feront l'interpolation pour vous avec des guillemets doubles, un peu comme perl et php avec des chaînes. – alzee

+0

Je suis assez sûr que ce n'est pas le problème. Je vois le même problème ici (avec GNU find 4.4.2). Je ne sais pas quel est le problème. –

+3

Vous avez oublié d'inclure les conditions dans parens '()'. Par conséquent, seule la dernière condition a déclenché '-print' et' -delete'. Essayez 'trouver. \ (-name "# *" -o name "* #" -o name "* ~" \) -impression -delete'. – alvits

Répondre

2

Vous avez oublié de joindre les conditions entre parenthèses (). Cela signifie que seule la dernière condition déclenchera les actions -print et -delete.

La valeur par défaut est -a, ce qui ne nécessite pas de parenthèse, c'est pourquoi la plupart des commandes de recherche telles que find -type f -name "pattern" -print fonctionnent sans parenthèse.

Vous devriez essayer:

find . \(-name "#*" -o -name "*#" -o -name "*~" \) -print -delete 
0

Qu'en est--print0 primaire en conjonction avec xargs -0'' comme celui-ci.

find . -type f -print0 | xargs -0 rm 

za:temp za$ ls 
file.txt file.txt~ 
za:temp za$ find . -name "*~" -print0 | xargs -0 rm 
za:temp za$ ls 
file.txt 

Ou avec xargs -I {} plus votre COMAND qui fait la même chose.

# xargs -I {} to capture the value of find 
find . -iname *something* | xargs -I {} rm {} 

edit: si vous ne pouvez pas voir les fichiers qui commencent par # en utilisant find . alors les fichiers ont des espaces dans le nom du fichier (s) comme # file.txt. vous aurez besoin de trouver des fichiers avec des espaces avec quelque chose comme find . -name "* *", puis supprimez les espaces.