如何防止`xargs` 的参数以空格为前缀?

vfc*_*sts 9 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$ 
Run Code Online (Sandbox Code Playgroud)

所以我想要做的是将输出通过管道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
Run Code Online (Sandbox Code Playgroud)

还有区分目录和文件的问题,但我想先处理这个。

更新:事实证明,它对rm -rf文件和目录都有效,在这种情况下它并不重要,所以我只需要替换rm xxxxrm -rf xxxx

mur*_*uru 17

在您希望参数出现的位置使用-I {}, 和{}

xargs -I {} -n 1 echo rm /usr/src/packages/{}
Run Code Online (Sandbox Code Playgroud)

(您可以使用 , 以外的其他东西{}{}这很常见。)

没有这个,xargssimpy 将输入作为附加参数添加,所以它不是在任何地方添加空格的问题 - 命令将输入​​作为单独的参数接收。

您可能应该使用find而不是ls,尤其是当您想区分文件和目录时。

像这样只删除文件:

find . -type f -exec rm /usr/src/packages/{} \;
Run Code Online (Sandbox Code Playgroud)