Encontré varios ejemplos que funcionan siempre que no haya espacios en los nombres de los archivos. Desafortunadamente, tengo espacios en mis nombres de archivos (no es mi elección, de hecho son los que necesito eliminar).
Así, por ejemplo, esto es lo que pensé que funcionaría:
encontrar . -tipo f | grep ).MOV | xargs rm
porque quiero eliminar los archivos como:
- L112 (1).MOV
- L113 (1).MOV
- L113 (2).MOV
- etc.
y quiero mantener los archivos como
- L112.MOV
- L113.MOV
- L114.MOV
- etc.
Esto encuentra los archivos correctamente:
encontrar . -tipo f | grep ).MOV
pero cuando lo canalizo a rm, los espacios en el nombre del archivo lo estropean.
Cualquier ayuda sería muy apreciada.
Respuesta1
rm *\).MOV
Respuesta2
Dígale xargs
que use nuevas líneas como delimitadores:
find . -type f | grep ).MOV | xargs -d'\n' rm
Mejor, haga find
la combinación y use -print0
y xargs -0
permitacualquiercarácter en los nombres de archivos, incluso \n
!
find . -type f -name '*).MOV' -print0 | xargs -0 rm
Aún mejor, simplemente find
llame rm
directamente.
find . -type f -name '*).MOV' -exec rm {} +
Mejor, omítelo rm
y haz find
que lo borre.
find . -type f -name '*).MOV' -delete
O en este caso concreto, ¿quién necesita toda la maquinaria pesada?
rm *\).MOV
Respuesta3
Prueba esto:
find . -name "*).MOV" -exec rm {} \;
Respuesta4
En la mayoría de las instalaciones de Unix, puede indicar un espacio en un nombre de archivo anteponiendo una barra invertida. Entonces, por ejemplo, prueba esto:
mkdir blah
cd blah
touch file1
touch file2
touch "file 3"
touch "file 4"
Haz un "ls" y deberías ver esto:
archivo 3 archivo 4 archivo1 archivo2
Ahora haz "ls *\ *" y deberías ver todo lo que tenga un espacio:
archivo 3 archivo 4
Entonces, ¿quizás solo necesitas un "rm *\ *"? O modifique ligeramente esa expresión regular para adaptarla a sus necesidades.
¡Espero que ayude!