Как предотвратить использование пробелов в качестве префикса для аргументов `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$ 

Итак, я хочу передать вывод в lsxargs, но когда я запускаю команду, к имени файла добавляется пробел, поэтому я получаю такой тестовый вывод.

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

решение1

Используйте -I {}, и {}в том месте, где вы хотите, чтобы появился аргумент:

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

(Вы можете использовать что-то другое {}, {}просто это очень распространено.)

Без этого xargssimpy добавляет входные данные в качестве дополнительных аргументов, поэтому вопрос добавления пробелов где-либо не стоит — команда получает входные данные в качестве отдельных аргументов.

Вероятно, вам следует использовать findвместо ls, особенно если вы хотите различать файлы и каталоги.

Что-то вроде этого, чтобы удалить только файлы:

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

Связанный контент