Por ejemplo tengo los siguientes archivos:
./dirA/fileA.png
./dirA/fileB.png
./dirA/fileC.png
./dirB/fileD.png
./dirB/fileE.png
./dirB/dirC/fileF.png
¿Existe algún comando o script de una línea para cambiar el nombre del archivo al siguiente?
./dirA/[email protected]
./dirA/[email protected]
./dirA/[email protected]
./dirB/[email protected]
./dirB/[email protected]
./dirB/dirC/[email protected]
Respuesta1
Intentar:
find . -type f -name '*.png' -execdir bash -c 'mv "$1" "${1%.png}@2x.png"' Move {} \;
find .
Esto inicia una búsqueda de archivos con el directorio actual.
-type f
Esto limita la búsqueda a archivos normales.
-name '*.png'
Esto limita la búsqueda a archivos cuyos nombres terminan en
.png
.-execdir bash -c '...' Move {} \;
Esto ejecuta el comando entre comillas simples con
$0
asignadoMove
y$1
asignado al nombre del archivo que se encontró. En nuestro caso, el comando entre comillas simples es:mv "$1" "${1%.png}@2x.png"
Esto cambia el nombre del archivo para que termine con
@2x.png
. La construcción${1%.png}
elimina el.png
del final del nombre del archivo. Por lo tanto,${1%.png}@2x.png
reemplaza.png
al final del nombre del archivo con@2x.png
.
Ejemplo
Comencemos con directorios con estos archivos:
$ find .
.
./dirA
./dirA/fileA.png
./dirA/fileC.png
./dirA/fileB.png
./dirB
./dirB/fileE.png
./dirB/dirC
./dirB/dirC/fileF.png
./dirB/fileD.png
Ahora, ejecutemos nuestro comando:
$ find . -type f -name '*.png' -execdir bash -c 'mv "$1" "${1%.png}@2x.png"' Move {} \;
Una vez ejecutado el comando, ahora tenemos estos archivos:
$ find .
.
./dirA
./dirA/[email protected]
./dirA/[email protected]
./dirA/[email protected]
./dirB
./dirB/dirC
./dirB/dirC/[email protected]
./dirB/[email protected]
./dirB/[email protected]