¿Cómo puedo evitar que los argumentos de `xargs` tengan el prefijo de espacios?

¿Cómo puedo evitar que los argumentos de `xargs` tengan el prefijo de espacios?

He extraído un archivo cuyo contenido no está almacenado en un subdirectorio en un directorio lleno de otros archivos y ahora está desordenado y confuso.

Para solucionar este problema, extraje el archivo en un nuevo directorio vacío y quiero usar la lista de directorios allí para eliminar los archivos del primer directorio que se mezclaron. Los archivos se extrajeron originalmente en el directorio '/usr/src/packages' y el nuevo directorio es ~/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$ 

Entonces, lo que quiero hacer es canalizar la salida de lsxargs, pero cuando ejecuto el comando, el nombre del archivo se antepone con un espacio, por lo que obtengo una salida de prueba como esta.

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

También está la cuestión de distinguir entre directorios y archivos, pero quiero abordar esto primero.

ACTUALIZACIÓN: Resulta que rm -rffunciona tan bien en archivos como en directorios, pero en este caso realmente no importa, así que simplemente tengo que reemplazarlo rm xxxxconrm -rf xxxx

Respuesta1

Utilice -I {}y {}en el lugar donde desea que aparezca el argumento:

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

(Puedes usar algo distinto {}, {}es muy común).

Sin esto, xargssimpy agrega la entrada como argumentos adicionales, por lo que no se trata de agregar espacios en ninguna parte: el comando recibe la entrada como argumentos separados.

Probablemente deberías utilizar finden lugar de ls, especialmente si quieres distinguir archivos y directorios.

Algo como esto para borrar sólo archivos:

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

información relacionada