Estoy intentando cambiar el nombre de un archivo usando find
el comando.
Estoy intentando cambiar el nombre del archivo-a al archivo-10.
Para hacer esto, primero probé el siguiente comando:
sps@sps-Inspiron-N5110:~$ find ~ -type f -name test-a -exec mv test-10 '{}' ';'
mv: cannot stat `test-10': No such file or directory
sps@sps-Inspiron-N5110:~$
Luego probé a continuación:
sps@sps-Inspiron-N5110:~$ find ~ -type f -name test-a -exec mv test-a test-10 '{}' ';'
mv: target `/home/sps/test-a' is not a directory
sps@sps-Inspiron-N5110:~$
Ahora no puedo pensar cómo hacer eso con find
. Estoy intentando hacer esto con find
, porque tendré muchos directorios con el mismo nombre de archivo y quiero cambiarlos todos test-a
en test-10
un solo comando. Alguien por favor sugiera.
Gracias.
Respuesta1
La sintaxis de mv
es mv <source> <target>
, por lo que el comando final que find
se ejecuta debería verse así:
mv test-a test-10
Entonces, la primera suposición sería intentar:
find ~ -type f -name test-a -exec mv {} test-10 \;
Sin embargo, esto fallará, ya que {}
se expande a la ruta completa y mv
aún se ejecuta en el directorio actual, lo que hace que todos los archivos se muevan a su directorio actual y se sobrescriban. Para evitar esto, puedes usar -execdir
so that mv
se ejecuta en el directorio donde se encontró el archivo:
find ~ -type f -name test-a -execdir mv {} test-10 \;
O, dado que el nombre del archivo es siempre el mismo:
find ~ -type f -name test-a -execdir mv test-a test-10 \;