
Estoy intentando mover varios archivos .avi que tienen espacios desde un CD a mi carpeta de inicio. Ya sé cómo deshacerme de los espacios:
find /media/mathscd/ | grep -L -r "*.avi" | for file in *; do mv "$file" echo $file | tr ' ' '_' ; done
Pero estoy luchando por moverme para encontrar los archivos editados y moverlos en masa a la carpeta. Sigo recibiendo el error mv: cannot stat '(standard input)': No such file or directory
. Este es el código que estoy intentando usar:
find /media/mathscd/ | grep -L -r "*.avi" | xargs -I{} mv {} /home/09murphyt/Downloads/
¿Alguien puede decirme qué estoy haciendo mal?
Respuesta1
Tu problema es el -L
cambio a grep
. Desde la página de manual:
L, --files- without-match
Suprime la salida normal; en su lugar, imprima el nombre de cada archivo de entrada del cual normalmente no se habría impreso ninguna salida. El escaneo se detendrá en el primer partido.
Entonces, en lugar de enumerar losnombres de archivosque no coinciden avi
solo enumera ellugardonde grep
no lo encontré avi
. Dado que grep
normalmente busca en un archivo, dicho modificador enumeraría los nombres de archivos que no contienen el patrón avi
dentro de ellos. En su caso, sin embargo, dado que está canalizando grep
desde find
, el archivo que grep
se está leyendo es (standard input)
. Para ver lo que quiero decir, intente:
find /media/mathscd | grep -L "*.avi"
resultado:
(standard input)
En otras palabras, grep
se encontraron líneas que no coinciden "*.avi"
en la entrada estándar, que es exactamente lo que sucedió.
Dado que find
enumera los nombres de los archivos directamente, sólo necesita invertir el sentido de la coincidencia:
find /media/mathscd | grep -v ".*\.avi"
(tenga en cuenta que grep
los patrones son diferentes de los comodines del shell; tampoco necesita el -r
modificador)
Además, usando find
solo:
find /media/mathscd ! -name "*.avi"
Respuesta2
Pruebe uno de estos:
find /media/mathscd/ -name *.avi -exec mv -t ~/Downloads/ {} +
find /media/mathscd/ -name *.avi -print0 | xargs -0 mv -t ~/Downloads/
Asegúrese de probarlo reemplazándolo xargs mv*
con xargs ls
el primero.