如何使“ls -1”結合xargs在引號中列印出來?
我執行這樣的
ls
命令來列出多個目錄。請注意文件夾中的空白區域X y
。ls -1d 2021*/"X y"/foobar
輸出是
'20211121-161518-801/X y/foobar' '20211128-151513-585/X y/foobar' '20211130-170001-724/X y/foobar'
看起來 ls 在這裡仍然使用引號。但是當我將此輸出與
xargs
引號結合使用時,接縫會失去ls: Zugriff auf '20211121-161518-801/X' nicht möglich: Datei oder Verzeichnis nicht gefunden ls: Zugriff auf 'y/foobar' nicht möglich: Datei oder Verzeichnis nicht gefunden
xargs 命令是這樣的
ls -1d 2021*/"X y"/foobar | xargs ls
最後我將使用 a
xargs rm -rf
但xargs ls
只是一個測試。
雖然 Stéphane Chazelas 總體上給了你很好的和深入了解“現代”的內容
ls
,但並非所有ls
的 es 都是平等的。即使新的 GNUls
會出現--zero
,也需要幾十年的時間才能滲透到所有地方,而且這仍然不適用於所有人,尤其是非基於 GNU 的系統。普遍的共識
ls
是,它是為人類消費而設計的,不應該真正被信任用於其他任何事情。儘管這是老管理員之間相當普遍的知識,但由於許多可以理解(和其他莫名其妙)的原因,新手和新手管理員仍然完全被
ls
. 隨著 Linux 超越利基市場並進入越來越多的主流和國有化環境,這種ls
熱愛正成為嚴重的問題(正如您自己的情況所證明的那樣)。這也是為什麼 GNUls
正在“快速”增長ls
幾十年來任何人都應該擁有的選項的原因。但是,如果您現在真的想可靠、安全地解決這個問題,那麼適合這項工作的正確工具是
find
命令:既可以用作零分隔列表生成器,也可以用作直接命令執行器。
find
用作零分隔列表生成器:find topdir -mindepth 1 [-maxdepth 2] -type d -print0 | xargs -0 -I@ stat @
用作
find
直接執行者:find topdir -mindepth 1 [-maxdepth 2] -type d -exec stat '{}' \;
使用
-mindpeth
/-maxdepth
您可以控制find
將下降的深度,通過-type
您控制它將處理哪些對象。您還可以匹配對象名稱甚至對象路徑。因為find
預設情況下不會以任何“智能”方式破壞或轉義對象名稱,所以您可以通過管道(生成器)或作為 argv 向量(執行器)的一部分,將這些 anmes 傳遞給原始而無需擔心。請記住,當以這種方式通過管道改組列表時,
-print0
必須始終使用,以便名稱以零分隔,其他字元(如空格和換行符)可以直接表示,不要混淆讀者。