agregar extensión de archivo recursivamente a todos los archivos


Tengo algunos directorios y subdirectorios que contienen archivos sin extensión de archivo. Quiero añadir .jpg a todos los archivos contenidos en estos directorios. He visto scripts bash para cambiar la extensión de archivo, pero no solo para agregar uno. También tiene que ser recursivo, puede alguien ayudar por favor?

Author: robjmills, 2009-07-10

6 answers

Comando alternativo sin un bucle explícito(man find):

find . -type f -exec mv '{}' '{}'.jpg \;

Explicación: esto busca recursivamente todos los archivos (-type f) a partir del directorio actual (.) y aplica el comando mover (mv) a cada uno de ellos. Tenga en cuenta también las comillas alrededor de {}, de modo que los nombres de archivo con espacios (e incluso nuevas líneas...) se manejan correctamente.

 190
Author: Stephan202,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-10 09:24:01

Esto va a encontrar archivos sin extensión y añadir su.jpg

find /path -type f -not -name "*.*" -exec mv "{}" "{}".jpg \;
 51
Author: ghostdog74,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-10 09:27:03

Esto es un poco tarde, pero pensé que agregaría que una mejor solución (aunque quizás menos legible) que las que hasta ahora podría ser:

find /path -type f -not -name "*.*" -print0 | xargs -0 rename 's/(.)$/$1.jpg/'

Usar el patrón find | xargs generalmente resulta en una ejecución más eficiente, ya que no tiene que bifurcar un nuevo proceso para cada archivo.

Tenga en cuenta que esto requiere la versión de rename que se encuentra en las distribuciones con sabor a Debian (también conocido como prename), en lugar del rename tradicional. Sin embargo, es solo un pequeño script de perl, por lo que sería lo suficientemente fácil de usar el comando anterior en cualquier sistema.

 9
Author: Chad Huneycutt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-23 15:41:42

Así,

for f in $(find . -type f); do mv $f ${f}.jpg; done

No espero que tenga nombres de archivos separados por espacio,
Si lo hace, los nombres tendrán que ser procesados un poco.

Si desea ejecutar el comando desde algún otro directorio,
puede reemplazar el find . con find /target/directory.

 4
Author: nik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-10 09:57:19

rename

No estoy seguro de que pueda cambiar el nombre de los archivos sin extensiones (estoy en Windows 7 en este momento)

 0
Author: dfa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-10 09:28:44

Para cambiar el nombre de todos los archivos sin extensión en Windows basic puede hacer ren * *.jpg Dado que el archivo no tiene extensión, solo use el*, o si desea cambiar png a jpg use ren *.png *.jpg

 0
Author: Nuno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-08 17:45:50