Bash komut verbose çıktısını bul


45

Bash findkomutuna ne yaptığını çıktığını söylemenin bir yolu var mı (ayrıntılı mod)?

Örneğin komut için: find /media/1Tb/videos -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;çıkış:

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

Yanıtlar:


61

Bir şeyle anlaşabilirsin -printf, ama en kolay olanı en baştan ele almak -print. Bu, neyin başarıyla silindiğini gösterecektir.


Bu cevap kullanırken herhangi bir şeye uygulanabilir find, bu yüzden yaşasın
Alex

Benim findaşkım başka sadece başka biraz büyüdü. thanks :)
Darragh Enright

8
Benim için "-exec rm -vf {} \;" kullanarak daha iyi çalıştı.
djangofan

1
Güzel! -Delete ile de çalışır: find -L . -type l -delete -print
runlevel0

18

Sadece rm -vfayrıntılı rm çıktısını kullanmaya ne dersiniz ?

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

için ayrıntılı seçenek rmharika ama eğer başka bir şeyle değiştirirsem, hangi dosyaların üzerinde çalıştığını artık göremiyorum ( echoiçeride kullanmazsam -exec)
Alex

8

Alternatif, komutların şu şekilde çalıştırılmasına izin vermektir sh -x:

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

shell debugmodu olanlar hakkında yeterince açık olacak. Teşekkürler
sdkks

1

find -D xxxxBazı durumlarda yardımcı olabilecek de var.

 $ 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

Aşağıda iki örnek verilmiştir find -D search:

RHEL 6.3 ( findv4.4) kullanarak :

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

Cygwin 1.7 ( find4.5) Kullanımı:

$ 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'ın cevabı benim için yeterliydi ama kendi kullanımım için bazı değişiklikler yaptım

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

açıklama

  1. bulmak
  2. pattern
  3. nullAyrı olarak yazdır , içinde boşluk veya sıra dışı karakter bulunan dosya adlarınız varsa, önemli
  4. xargsnullAyrı oku , her kayıt yer tutucusunu ayarla %% Bu, aynı zamanda yalnızca bir bağımsız değişken kullandığında da sağlar
  5. bash komut, bir astar, herhangi bir şey içeri girerse, tek alıntı yapılmalı '
  6. --ondan sonra yaptığım her şey tek seçenek betiğime göre seçenekler xargsveya bashseçenekler değil konumsal parametreler
  7. Yer tutucu, alıntı yaparak tek bir argüman olarak verilir, tek veya çift alıntı önemli değildir. Çift tırnak kullanıyorsanız, kabuk değişkenleri de ekleyebilirsiniz.
  8. İçinde bashsenaryo, erişebileceğiniz %%olarak $1, pozisyonel argüman yok 1.

Not: %%Herhangi bir şeyle değişiklik yapabilirsiniz , yalnızca yer tutucudan başka bir şey için kullanmanıza gerek olmadığından emin olun. Dolar kullanılması $veya @bu çifte olmadığı sürece, iyi olmayabilir @gibi @@.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.