Xargs

如何防止 xargs 的參數以空格為前綴?

  • October 24, 2016

我已經將一個內容未儲存在子目錄中的檔案提取到一個充滿其他文件的目錄中,現在變得混亂和混亂。

為了解決這個問題,我已將存檔解壓縮到一個新的空目錄中,並希望使用那裡的目錄列表從第一個目錄中刪除混淆的文件。這些文件最初被提取到“/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 xxxxrm -rf xxxx

在您希望參數出現的位置使用-I {}, 和:{}

xargs -I {} -n 1 echo rm /usr/src/packages/{}

(您可以使用 , 以外的其他東西{}{}這很常見。)

如果沒有這個,xargssimpy 會將輸入作為附加參數添加,因此它不是在任何地方添加空格的問題 - 該命令將輸入作為單獨的參數接收。

您可能應該使用find而不是ls,特別是如果您想區分文件和目錄。

像這樣只刪除文件:

find . -type f -exec rm /usr/src/packages/{} \;

引用自:https://unix.stackexchange.com/questions/318470