Bash
循環遍歷文件夾併計算 TAR 中的文件
我需要遍歷文件夾併計算 TAR 中具有相同名稱的文件。
我試過這個:
find -name example.tar -exec tar -tf {} + | wc -l
但它失敗了:
tar: ./rajce/rajce/example.tar: Not found in archive tar: Exiting with failure status due to previous errors 0
它在只有一個 example.tar 時有效。
我需要為每個文件單獨編號。
謝謝!
您需要
tar -tf {} \;
而不是單獨使用每個 tarballtar -tf {} +
執行。tar
在 GNUman find
中它說:-exec command {} + This variant of the -exec action runs the specified command on the selected files, but the command line is built by appending each selected file name at the end; the total number of invocations of the command will be much less than the number of matched files. The command line is built in much the same way that xargs builds its command lines. Only one instance of `{}' is allowed within the com- mand. The command is executed in the starting directory.
您的命令相當於
tar tf example.tar example.tar
. 您還缺少[path...]
參數 - 的某些實現find
,例如 BSD find 將返回find: illegal option -- n
錯誤。總而言之應該是:find . -name example.tar -exec tar -tf {} \; | wc -l
請注意,在這種情況下,
wc -l
將計算找到的所有example.tar
文件中的文件數。您可以使用僅在目前目錄中-maxdepth 1
搜尋 文件。example.tar
如果要example.tar
遞歸搜尋所有結果並分別列印每個結果(請注意,$
這是一個命令行提示符 ,用於指示新行的開始,而不是命令的一部分):$ find . -name example.tar -exec sh -c 'tar -tf "$1" | wc -l' sh {} \; 3 3
並附加目錄名稱:
$ find . -name example.tar -exec sh -c 'printf "%s: " "$1" && tar -tf "$1" | wc -l' sh {} \; ./example.tar: 3 ./other/example.tar: 3