Linux
無輸出:busybox find 。-exec sh -c ’ 讀取連結 -f ‘$1’ |尾 -n +2 ’ sh {} ;
我只能訪問 Busybox 1.31.1
我最初想刪除輸出的目前工作目錄(單點)。
例子:
/prueba$ ls uno dos tres
當我:
$ busybox find . . ./uno ./dos ./tres
這很容易通過以下任一方式完成:
busybox find . -not -path . busybox find . -mindepth 1
現在,我之前嘗試的是:
busybox find . -exec sh -c ' readlink -f "$1" | tail -n +2 ' sh {} \;
什麼都不列印。如果啟動詳細輸出:
==> standard input <== ==> standard input <== ==> standard input <== ==> standard input <== ==> standard input <==
如果行地址為 1,則輸出完全不同:
busybox find . -exec sh -c ' readlink -f "$1" | tail -n +1 ' sh {} \;
==> standard input <== /tmp/prueba ==> standard input <== /tmp/prueba/tres ==> standard input <== /tmp/prueba/dos ==> standard input <== /tmp/prueba/uno
這是怎麼回事?
這
-exec some command with parms {} \;
為每個文件呼叫一次命令。在您的情況下,
readlink
輸出一行輸出,然後您tail -n +2
剝離第一行,讓您一無所有。如果您使用tail -n +1
這只是一種冗長的說法cat
,將輸入複製到輸出。如果你重寫它,那麼它就在這樣
tail -n +2
的隱式循環之外busybox find . -exec sh -c ' readlink -f "$1" ' sh {} \; | tail -n +2
你會得到你預期的結果。
您可以通過批處理命令執行來提高命令的效率。
busybox find . -exec readlink -f -- {} + | tail -n +2
這需要您要執行的命令來獲取多個文件。而
+
不是\;
make find 執行命令的次數要少得多,因為它僅在具有完整的文件名緩衝區而不是每個文件一次時才執行命令。顯然我也刪除了不需要sh
的。