
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 ls
xargs, 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 -rf
funciona tan bien en archivos como en directorios, pero en este caso realmente no importa, así que simplemente tengo que reemplazarlo rm xxxx
conrm -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, xargs
simpy 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 find
en 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/{} \;