¿Cómo mover archivos con nombres que contienen varios caracteres especiales como 'é' 'ä' 'espacio'?

¿Cómo mover archivos con nombres que contienen varios caracteres especiales como 'é' 'ä' 'espacio'?

Estoy intentando mover mis archivos del directorio actual a otro directorio. El problema que tengo es que varios archivos tienen un nombre con caracteres especiales como space, ü, &, (, .... ¿Cómo puedo mover todos mis archivos usando un comando como: ls | grep mp4 | xargs -i mv {} mp4, donde {}se supone que es el nombre del archivo actual y mp4 el destino para colocar todos mis archivos? Probé el comando pero muestra errores. ¿Puedes ayudarme?

Respuesta1

Esta es exactamente la situaciónno quieres usarlsO xargscon la configuración predeterminada, dividirá la entrada en espacios y manejará especialmente las comillas y las barras invertidas. Necesitaría usarlo -0para separar la entrada en bytes nulos o -d'\n'separar las nuevas líneas (GNU xargs) para desactivar ese comportamiento.

Como todos los archivos están en el mismo directorio, puedes usar el shell:

mv *mp4* mp4/

O mv *.mp4 mp4/si solo te refieres a archivos que tienen mp4como extensión. El primero advertiría sobre el traslado mp4a mp4.)


Si los archivos no estuvieran en el mismo directorio, necesitaría usar la doble estrella ( zsh- habilitada de forma predeterminada o kshcon set -o globstaro bashcon shopt -s globstar):

mv **/*mp4* mp4/

ofind

find . -type f -name "*mp*" -exec mv {} mp4/ \;

Respuesta2

El comando:

ls | grep mp4 | xargs -i mv {} mp4

En la mayoría de los casos puede ser reemplazado por el más simple y robusto:

mv *mp4* mp4

Puede ignorar la advertencia acerca de que el directorio mp4 no se puede mover dentro de sí mismo.

Tenga en cuenta que esta secuencia de comandos, como la suya, mueve todos los archivos que tienen " mp4" en cualquier parte de su nombre (por ejemplo: mp4list.txt, lamp4.jpg). Si realmente desea mover sólo archivos con la extensión " .mp4", puede utilizar:

mv *.mp4 mp4

Eso evitaría que mp4se produjera la situación que provoca el mensaje de error sobre el directorio.

Si la cantidad de archivos mp4 es enorme e impide que funcione el comando anterior, puede usar GNU findpara lograr lo mismo:

find . -maxdepth 1 -name "*mp4*" -exec mv -t mp4 {} +

o

find . -maxdepth 1 -name "*.mp4" -exec mv -t mp4 {} +

información relacionada