Bash find Befehl ausführliche Ausgabe

46

Gibt es eine Möglichkeit, dem bash- findBefehl mitzuteilen , was er ausgibt (ausführlicher Modus)?

Zum Beispiel für den Befehl: find /media/1Tb/videos -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;zur Ausgabe:

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

Antworten:

62

Man könnte sich etwas einfallen lassen -printf, aber am einfachsten ist es, -printam Ende weiterzumachen . Dies zeigt an, was erfolgreich gelöscht wurde.

Ignacio Vazquez-Abrams
quelle
Diese Antwort kann auf alles angewendet werden, wenn verwendet find, also Daumen hoch
Alex
meine findLiebe wuchs noch ein bisschen. Danke :)
Darragh Enright
8
Für mich mit "-exec rm -vf {} \;" hat besser funktioniert.
Djangofan
1
Nett! Arbeiten mit -delete zu: find -L . -type l -delete -print
runlevel0
19

Wie wäre es einfach mit rm -vffür ausführliche RM-Ausgabe.

$ touch file1 file2 file3
$ find . -name "file?" -exec rm -vf {} \;
removed `./file2'
removed `./file3'
removed `./file1'
HampusLi
quelle
Die ausführliche Option für rmist cool, aber wenn ich sie durch etwas anderes ersetze, kann ich nicht mehr sehen, an welchen Dateien gearbeitet wird (es sei denn, ich verwende sie im echoInneren -exec)
Alex
8

Eine Alternative besteht darin, die Befehle ausführen zu lassen durch sh -x:

$ find . -type f -print0 | xargs -0 -n1 echo rm | sh -x
+ rm ./file1
+ rm ./file2
+ rm ./file3
hlovdal
quelle
shell debugModus wird klar genug sein, was passiert ist. Danke
sdkks
1

Es gibt auch das find -D xxxx, was in einigen Fällen helfen könnte.

 $ 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

Nachfolgend finden Sie zwei Beispiele für find -D search:

Verwendung von RHEL 6.3 ( findv4.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)

Verwenden von 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
quelle
1

@hlovdavs Antwort hat mir gereicht, aber ich habe einige Änderungen für meinen eigenen Gebrauch vorgenommen

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

Erläuterung

  1. finden
  2. pattern
  3. nullSeparat drucken , wichtig, wenn Sie Dateinamen mit Leerzeichen oder ungewöhnlichen Zeichen haben
  4. xargsLesen Sie nullgetrennt, setzen Sie jeden Datensatzplatzhalter auf %% Dies stellt auch sicher, dass jedes Mal nur ein Argument verwendet wird
  5. bash Befehl, Einzeiler, alles, was rein geht, muss in einfachen Anführungszeichen stehen '
  6. --alles was bedeutet , ich danach tun ist , nicht xargsoder bashOptionen , aber Positionsparameter zu meinem Einzeiler Skript
  7. Platzhalter werden als einfaches Argument in Anführungszeichen angegeben, einfache oder doppelte Anführungszeichen spielen keine Rolle. Wenn Sie doppelte Anführungszeichen verwenden, können Sie auch Shell-Variablen einfügen.
  8. Innerhalb des bashSkripts können Sie auf %%das $1Positionsargument Nr. 1 zugreifen

Hinweis: Sie können %%alles ändern , stellen Sie jedoch sicher, dass Sie es nur für einen Platzhalter verwenden müssen. Mit Dollar $oder @vielleicht nicht gut, es sei denn, es ist doppelt so gut @wie @@.

sdkks
quelle