Solución 1:
para un solo archivo intente
mv dir1/dir2/dir3/file.{txt,txt.old}
donde el X{a,b}
construir expandir a Xa Xb
, puede tener una vista previa usando
echo dir1/dir2/dir3/file.{txt,txt.old}
para ver si se ajusta a su necesidad.
nota:
-
eso para múltiples archivos
mv dir1/dir2/dir3/file{1,2,3}.{txt,txt.old}
es poco probable que se expanda a lo que desea. (esto se expandirá a una combinación de file.txt file1.txt.old file2.txt ...)
-
{txt,txt.old}
se puede acortar a{,.old}
según comentario -
si el nombre del directorio no es ambiguo, se puede usar un comodín.
mv *1/*2/d*/*.{,old}
para uso de archivos múltiples rename
rename -n s/txt/old.txt/ dir1/dir2/dir3/file*.txt
suelta -n
para tener un cambio de nombre efectivo.
Solución 2:
El comando rename
cambia el nombre de todos los archivos coincidentes. Su objetivo principal es cambiar el nombre de varios archivos, pero si la expresión de Perl coincide solo con un archivo, cambiará el nombre solo de este único archivo. Para obtener detalles y la sintaxis específica de la distribución, lea la página de manual:man rename
.
Ejemplo de uso:cambiar el nombre de "/ruta/archivo.txt" a "/ruta/archivo.txt.antiguo":
rename 's/file.txt/file.txt.old/g' /path/file.txt
Notación más corta (gracias a shalomb):
rename 's/$/.old/' /path/file.txt
rename '$_.=".old"' /path/file.txt
Para una ejecución en seco, use rename -n
.
Se pueden encontrar más ejemplos y detalles en https://thepcspy.com/read/bulk-rename-files-in-ubuntu/
Solución 3:
Me gusta la solución de @archemar de usar la expansión {}, porque puede usarla cuando ya haya iniciado su línea de comando. Aquí hay algunas otras posibilidades para completar:
F="dir1/dir2/dir3/file.txt" ; mv "$F" "$F.old"
(las comillas solo son necesarias si tiene espacios u otros caracteres que separan palabras en el nombre)
mymv() {
mv "$1/$2" "$1/$3"
}
mymv dir1/dir2/dir3 file.txt file.txt.old
mymv dir5/dir6/dir7 file.txt file.txt.old
Notas:
- Esta es la sintaxis bash, es posible que esté usando otro shell
mymv
puede ser cualquier cadena razonable, usé mymv para "mi jugada".- La definición de la función se puede poner en su .bash_profile
Otro:
cd dir1/dir2/dir3 ; mv file.txt file.txt.old ; cd -
pero
(cd dir1/dir2/dir3/ && exec mv file.txt file.txt.old)
(de @Adam y @CharlesDuffy) podría decirse que es mejor en caso de que el CD falle.
Solución 4:
Para un caso único, si no quiero cambiar mi directorio actual, podría usar una subcapa:
(cd dir1/dir2/dir3/ && mv file.txt file.txt.old)
Porque tú cd
dentro de la subcapa, no ha cambiado su directorio en su caparazón real
Solución 5:
Si desea ingresar al subdirectorio para acortar el mv
comando, pero desea volver al directorio actual después, hay dos formas de hacerlo. Una es poner el cd
y mv
en una subcapa (como ya se ha sugerido).
La otra es usar pushd
y popd
para cambiar de directorio:
pushd dir1/dir2/dir3/; mv file.txt file.txt.old; popd
El pushd
el comando es como cd
, excepto que primero inserta el nombre del directorio actual en una pila. popd
elimina el nombre superior de la pila y cambia a ese directorio.