Sortie Bash de la commande find

46

Existe-t-il un moyen de dire à la findcommande bash d’afficher ce qu’elle fait (mode commenté)?

Par exemple pour la commande: find /media/1Tb/videos -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;output:

Found /media/1Tb/videos/102, executing rm -rf /media/1Tb/videos/102
...
Alex
la source

Réponses:

62

Vous pourriez concocter quelque chose avec -printf, mais le plus simple est de clouer -printà la fin. Cela montrera ce qui a été supprimé avec succès.

Ignacio Vazquez-Abrams
la source
cette réponse peut être appliquée à n'importe quoi lors de l'utilisation find, alors bravo
Alex
mon findamour a grandi un peu plus loin. merci :)
Darragh Enright
8
Pour moi, utiliser "-exec rm -vf {} \;" travaillé mieux.
djangofan
1
Agréable! Fonctionne aussi avec -delete: find -L . -type l -delete -print
runlevel0
19

Que diriez-vous simplement d’utiliser rm -vfpour la sortie verbose rm.

$ touch file1 file2 file3
$ find . -name "file?" -exec rm -vf {} \;
removed `./file2'
removed `./file3'
removed `./file1'
HampusLi
la source
l'option verbeuse pour rmest cool, mais si je la remplace par quelque chose d'autre, je ne peux plus voir quels fichiers sont en cours de traitement (sauf si j'utilise l' echointérieur -exec)
Alex
8

Une alternative consiste à laisser les commandes être exécutées par sh -x:

$ find . -type f -print0 | xargs -0 -n1 echo rm | sh -x
+ rm ./file1
+ rm ./file2
+ rm ./file3
Hlovdal
la source
shell debugLe mode sera assez clair sur ce qui est arrivé. Merci
sdkks
1

Il y a aussi find -D xxxxcela pourrait aider dans certains cas.

 $ find -D help
 Valid arguments for -D:
 help       Explain the various -D options
 tree       Display the expression tree
 search     Navigate the directory tree verbosely
 stat       Trace calls to stat(2) and lstat(2)
 rates      Indicate how often each predicate succeeded
 opt        Show diagnostic information relating to optimisation
 exec       Show diagnostic information relating to -exec, -execdir, -ok and -okdir

Voici deux exemples de find -D search:

findAvec RHEL 6.3 ( v4.4):

$ mkdir -p aa/bb
$ touch aa/11 aa/22 aa/33 aa/bb/44 aa/bb/55
$ find -D search aa -type f -delete
consider_visiting: fts_info=FTS_D , fts_level= 0, prev_depth=-2147483648 fts_path=`aa', fts_accpath=`aa'
consider_visiting: fts_info=FTS_D , fts_level= 1, prev_depth=0 fts_path=`aa/bb', fts_accpath=`bb'
consider_visiting: fts_info=FTS_NSOK, fts_level= 2, prev_depth=1 fts_path=`aa/bb/55', fts_accpath=`55'
consider_visiting: fts_info=FTS_NSOK, fts_level= 2, prev_depth=2 fts_path=`aa/bb/44', fts_accpath=`44'
consider_visiting: fts_info=FTS_DP, fts_level= 1, prev_depth=2 fts_path=`aa/bb', fts_accpath=`bb'
consider_visiting: fts_info=FTS_NSOK, fts_level= 1, prev_depth=1 fts_path=`aa/22', fts_accpath=`22'
consider_visiting: fts_info=FTS_NSOK, fts_level= 1, prev_depth=1 fts_path=`aa/33', fts_accpath=`33'
consider_visiting: fts_info=FTS_NSOK, fts_level= 1, prev_depth=1 fts_path=`aa/11', fts_accpath=`11'
consider_visiting: fts_info=FTS_DP, fts_level= 0, prev_depth=1 fts_path=`aa', fts_accpath=`aa'
$ find --version
find (GNU findutils) 4.4.2
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Built using GNU gnulib version e5573b1bad88bfabcda181b9e0125fb0c52b7d3b
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION SELINUX FTS() CBO(level=0)

Utilisation de Cygwin 1.7 ( find4.5):

$ mkdir -p aa/bb
$ touch aa/11 aa/22 aa/33 aa/bb/44 aa/bb/55
$ find -D search aa -type f -delete
consider_visiting (early): 'aa': fts_info=FTS_D , fts_level= 0, prev_depth=-2147483648 fts_path='aa', fts_accpath='aa'
consider_visiting (late): 'aa': fts_info=FTS_D , isdir=1 ignore=1 have_stat=1 have_type=1
consider_visiting (early): 'aa/11': fts_info=FTS_NSOK, fts_level= 1, prev_depth=0 fts_path='aa/11', fts_accpath='11'
consider_visiting (late): 'aa/11': fts_info=FTS_NSOK, isdir=0 ignore=0 have_stat=0 have_type=1
consider_visiting (early): 'aa/22': fts_info=FTS_NSOK, fts_level= 1, prev_depth=1 fts_path='aa/22', fts_accpath='22'
consider_visiting (late): 'aa/22': fts_info=FTS_NSOK, isdir=0 ignore=0 have_stat=0 have_type=1
consider_visiting (early): 'aa/33': fts_info=FTS_NSOK, fts_level= 1, prev_depth=1 fts_path='aa/33', fts_accpath='33'
consider_visiting (late): 'aa/33': fts_info=FTS_NSOK, isdir=0 ignore=0 have_stat=0 have_type=1
consider_visiting (early): 'aa/bb': fts_info=FTS_D , fts_level= 1, prev_depth=1 fts_path='aa/bb', fts_accpath='bb'
consider_visiting (late): 'aa/bb': fts_info=FTS_D , isdir=1 ignore=1 have_stat=1 have_type=1
consider_visiting (early): 'aa/bb/44': fts_info=FTS_NSOK, fts_level= 2, prev_depth=1 fts_path='aa/bb/44', fts_accpath='44'
consider_visiting (late): 'aa/bb/44': fts_info=FTS_NSOK, isdir=0 ignore=0 have_stat=0 have_type=1
consider_visiting (early): 'aa/bb/55': fts_info=FTS_NSOK, fts_level= 2, prev_depth=2 fts_path='aa/bb/55', fts_accpath='55'
consider_visiting (late): 'aa/bb/55': fts_info=FTS_NSOK, isdir=0 ignore=0 have_stat=0 have_type=1
consider_visiting (early): 'aa/bb': fts_info=FTS_DP, fts_level= 1, prev_depth=2 fts_path='aa/bb', fts_accpath='bb'
consider_visiting (late): 'aa/bb': fts_info=FTS_DP, isdir=1 ignore=0 have_stat=1 have_type=1
consider_visiting (early): 'aa': fts_info=FTS_DP, fts_level= 0, prev_depth=1 fts_path='aa', fts_accpath='aa'
consider_visiting (late): 'aa': fts_info=FTS_DP, isdir=1 ignore=0 have_stat=1 have_type=1
$ find --version
find (GNU findutils) 4.5.11
Packaged by Cygwin (4.5.11-1)
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS(FTS_CWDFD) CBO(level=2)
olibre
la source
1

La réponse de @ hlovdav était suffisante pour moi mais j'ai apporté quelques modifications pour mon usage personnel

find . -name 'application*.yml' -print0 | xargs -0 -I %% bash -c 'rm -v "$1"' -- "%%"

Explication

  1. trouver
  2. pattern
  3. Impression nullséparée, importante si vous avez des noms de fichiers contenant des espaces ou des caractères inhabituels
  4. xargsen lecture nullséparée, définissez chaque paramètre fictif d'enregistrement sur %% Ceci garantit également que chaque fois qu'il utilise un seul argument
  5. bash commande, one-liner, tout y passe, doit être cité entre guillemets '
  6. --ce qui signifie tout ce que je fais après ce n'est pas xargsou bashoptions, mais des paramètres de position à mon script one-liner
  7. L'espace réservé est donné sous forme d'argument unique en le citant, citation simple ou double n'a pas d'importance. Si vous utilisez des guillemets doubles, vous pouvez également insérer des variables shell.
  8. Dans le bashscript, vous pouvez accéder en %%tant que $1, argument de position n ° 1

Remarque: vous pouvez modifier %%n'importe quoi, assurez-vous simplement que vous n'avez pas besoin de l'utiliser pour autre chose qu'un paramètre fictif. L' utilisation du dollar $ou @pourrait ne pas être bon, à moins que c'est à double @comme @@.

sdkks
la source