Bash find perintah keluaran verbose


46

Apakah ada cara untuk memberi tahu findperintah bash untuk menampilkan apa yang dilakukannya (mode verbose)?

Misalnya untuk perintah: find /media/1Tb/videos -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;to output:

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

Jawaban:


62

Anda dapat membuat sesuatu dengan -printf, tetapi yang paling mudah adalah dengan menempel -printdi bagian akhir. Ini akan menunjukkan apa yang berhasil dihapus.


jawaban ini dapat diterapkan untuk apa saja saat menggunakan find, jadi acungan jempol
Alex

saya findcinta tumbuh lain hanyalah sedikit. terima kasih :)
Darragh Enright

8
Bagi saya, menggunakan "-exec rm -vf {} \;" bekerja lebih baik.
djangofan

1
Bagus! Bekerja dengan -delete juga: find -L . -type l -delete -print
runlevel0

19

Bagaimana kalau hanya menggunakan rm -vfuntuk keluaran rm verbose.

$ touch file1 file2 file3
$ find . -name "file?" -exec rm -vf {} \;
removed `./file2'
removed `./file3'
removed `./file1'

pilihan verbose untuk rmitu keren tetapi jika saya menggantinya dengan sesuatu yang lain saya tidak bisa lagi melihat file apa yang sedang dikerjakan (kecuali saya gunakan echodi dalam -exec)
Alex

8

Alternatifnya adalah membiarkan perintah dijalankan oleh sh -x:

$ find . -type f -print0 | xargs -0 -n1 echo rm | sh -x
+ rm ./file1
+ rm ./file2
+ rm ./file3

shell debugMode akan cukup jelas tentang apa yang telah terjadi. Terima kasih
SDK

1

Ada juga find -D xxxxyang bisa membantu dalam beberapa kasus.

 $ 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

Di bawah ini adalah dua contoh find -D search:

Menggunakan 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)

Menggunakan 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)

1

@ hlovdav jawaban sudah cukup untuk saya tetapi saya melakukan beberapa modifikasi untuk saya gunakan sendiri

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

Penjelasan

  1. Temukan
  2. pattern
  3. Cetak nullterpisah, penting jika Anda memiliki nama file dengan spasi atau karakter yang tidak biasa di dalamnya
  4. xargsbaca nullterpisah, atur setiap record placeholder ke %% Ini juga memastikan setiap kali hanya menggunakan satu argumen
  5. bash perintah, satu-liner, apa pun yang masuk ke dalam, harus dikutip tunggal '
  6. --berarti apa pun yang saya lakukan setelah ini bukan xargsatau bashopsi tetapi parameter posisional untuk skrip satu baris saya
  7. Placeholder diberikan sebagai argumen tunggal dengan mengutipnya, kutipan tunggal atau ganda tidak masalah. Jika Anda menggunakan tanda kutip ganda, Anda dapat memasukkan variabel shell juga.
  8. Di dalam bashskrip, Anda dapat mengakses %%sebagai $1, argumen posisi No # 1

Catatan: Anda dapat mengubahnya %%dengan apa saja, pastikan Anda tidak perlu menggunakannya untuk apa pun selain pengganti. Menggunakan dollar $atau @mungkin tidak baik, kecuali jika ganda @seperti @@.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.