Bash tìm đầu ra verbose


46

Có cách nào để nói findlệnh bash xuất ra những gì nó đang làm (chế độ dài dòng) không?

Ví dụ cho lệnh: 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
...

Câu trả lời:


62

Bạn có thể pha chế một cái gì đó với -printf, nhưng cách dễ nhất chỉ là giải quyết -printvấn đề cuối cùng. Điều này sẽ hiển thị những gì đã được xóa thành công.


câu trả lời này có thể được áp dụng cho bất cứ điều gì khi sử dụng find, vì vậy hãy đồng ý
Alex

findtình yêu của tôi lớn lên thêm một chút nữa. cảm ơn :)
Darragh Enright

8
Đối với tôi, sử dụng "-exec rm -vf {} \;" làm việc tốt hơn
djangofan

1
Đẹp! Hoạt động với -delete quá: find -L . -type l -delete -print
runlevel0

19

Làm thế nào về việc chỉ sử dụng rm -vfcho đầu ra rbo verbose.

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

tùy chọn verbose rmrất tuyệt nhưng nếu tôi thay thế nó bằng một thứ khác thì tôi không còn thấy tập tin nào đang được xử lý nữa (trừ khi tôi sử dụng echobên trong -exec)
Alex

8

Một cách khác là để cho các lệnh được thực thi bởi sh -x:

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

shell debugChế độ sẽ đủ rõ ràng về những gì đã xảy ra. Cảm ơn
sdkks

1

Cũng find -D xxxxcó thể giúp trong một số trường hợp.

 $ 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

Dưới đây là hai ví dụ về find -D search:

Sử dụng 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)

Sử dụng 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

Câu trả lời của @ hlovdav là đủ cho tôi nhưng tôi đã thực hiện một số sửa đổi cho việc sử dụng của riêng tôi

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

Giải trình

  1. tìm thấy
  2. pattern
  3. In nulltách biệt, quan trọng nếu bạn có tên tệp có dấu cách hoặc ký tự bất thường trong đó
  4. xargsđọc nulltách biệt, đặt từng chỗ giữ bản ghi thành %% Điều này cũng đảm bảo mỗi lần nó chỉ sử dụng một đối số
  5. bash lệnh, một-liner, bất cứ điều gì đi vào bên trong, phải được trích dẫn duy nhất '
  6. --có nghĩa là bất cứ điều gì tôi làm sau này không phải là xargshoặc bashtùy chọn mà là tham số vị trí cho tập lệnh một lớp của tôi
  7. Giữ chỗ được đưa ra dưới dạng đối số duy nhất bằng cách trích dẫn nó, trích dẫn đơn hoặc kép không thành vấn đề. Nếu bạn sử dụng dấu ngoặc kép, bạn cũng có thể chèn các biến shell.
  8. Bên trong bashtập lệnh, bạn có thể truy cập %%dưới dạng $1, đối số vị trí số 1

Lưu ý: Bạn có thể thay đổi %%với bất cứ điều gì, chỉ cần đảm bảo rằng bạn không cần sử dụng nó cho bất cứ điều gì khác ngoài giữ chỗ. Sử dụng đồng USD $hoặc @có thể không được tốt, trừ khi đó là đôi @như @@.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.