Xargs如何防止
如何防止 xargs
的參數以空格為前綴?
我已經將一個內容未儲存在子目錄中的檔案提取到一個充滿其他文件的目錄中,現在變得混亂和混亂。
為了解決這個問題,我已將存檔解壓縮到一個新的空目錄中,並希望使用那裡的目錄列表從第一個目錄中刪除混淆的文件。這些文件最初被提取到“/usr/src/packages”目錄中,新目錄為
~/Programs/DBeaver
.vfclists@hp01:~/Programs/DBeaver$ ls -l total 216 -rw-r--r-- 1 vfclists vfclists 48943 Oct 23 23:28 artifacts.xml drwxr-xr-x 4 vfclists vfclists 4096 Oct 23 23:28 configuration -rwxr-xr-x 1 vfclists vfclists 79058 Oct 23 22:58 dbeaver -rw-r--r-- 1 vfclists vfclists 206 Oct 23 23:28 dbeaver.ini -rw-r--r-- 1 vfclists vfclists 7919 Oct 9 14:05 dbeaver.png drwxr-xr-x 23 vfclists vfclists 4096 Oct 23 23:28 features -rwxr-xr-x 1 vfclists vfclists 35021 Oct 23 22:58 icon.xpm drwxr-xr-x 2 vfclists vfclists 4096 Oct 23 23:28 licenses drwxr-xr-x 4 vfclists vfclists 4096 Oct 23 23:28 p2 drwxr-xr-x 6 vfclists vfclists 20480 Oct 23 23:28 plugins -rw-r--r-- 1 vfclists vfclists 1791 Oct 23 23:28 readme.txt vfclists@hp01:~/Programs/DBeaver$
所以我想要做的是將輸出通過管道
ls
傳輸到 xargs 但是當我執行命令時,文件名前面有一個空格,所以我得到這樣的測試輸出。vfclists@hp01:~/Programs/DBeaver$ ls | xargs -n 1 echo rm /usr/src/packages/ rm /usr/src/packages/ artifacts.xml rm /usr/src/packages/ configuration rm /usr/src/packages/ dbeaver rm /usr/src/packages/ dbeaver.ini rm /usr/src/packages/ dbeaver.png rm /usr/src/packages/ features rm /usr/src/packages/ icon.xpm rm /usr/src/packages/ licenses rm /usr/src/packages/ p2 rm /usr/src/packages/ plugins rm /usr/src/packages/ readme.txt
還有區分目錄和文件的問題,但我想先處理一下。
更新:事實證明,
rm -rf
文件和目錄一樣有效,在這種情況下並不重要,所以我只需要替換rm xxxx
為rm -rf xxxx
在您希望參數出現的位置使用
-I {}
, 和:{}
xargs -I {} -n 1 echo rm /usr/src/packages/{}
(您可以使用 , 以外的其他東西
{}
,{}
這很常見。)如果沒有這個,
xargs
simpy 會將輸入作為附加參數添加,因此它不是在任何地方添加空格的問題 - 該命令將輸入作為單獨的參數接收。您可能應該使用
find
而不是ls
,特別是如果您想區分文件和目錄。像這樣只刪除文件:
find . -type f -exec rm /usr/src/packages/{} \;