![¿Cambiar el nombre del archivo (prefijo) con la ruta completa?](https://rvso.com/image/89180/%C2%BFCambiar%20el%20nombre%20del%20archivo%20(prefijo)%20con%20la%20ruta%20completa%3F.png)
Me gustaría poner un prefijo a mis archivos ( .dat
) de esta manera:
CLY_BIZ_COM_PERD.dat -> 20160622CLY_BIZ_COM_PERD.dat
He probado lo siguiente:
key=`date "+%Y%m%d"`
for i in $(ls /Path/*.dat); do mv ${i} "${key}${i}" ;done
Pero este comandosufijomis archivos y no anteponerlo. ¿Cómo puedo hacer esto?
Respuesta1
Dos cambios en su script actual:
noanalizar ls;en lugar de confiaren el globo del caparazón
debido a que los archivos están en un subdirectorio, primero
cd
allí y ejecute el bucle, o usebasename
ydirname
para extraer las partes del directorio y el nombre del archivo antes de agregar el prefijo.
(Nota: también cambié su "/Path" a "./Path" porque no quería crear un directorio /Path de nivel raíz. Sin embargo, se aplican los mismos principios.
Para configurar algunos archivos de muestra:
mkdir Path && cd Path
touch CLY_BIZ_COM_PERD.dat jeff.dat a.dat c\ d.dat
cd ..
Aquí hay un ensayo:
for f in ./Path/*.dat
do
printf "mv '%s' '%s'\n" "$f" "$(dirname "$f")/${key}$(basename "$f")"
done
Resultado del simulacro:
mv './Path/a.dat' './Path/20160622a.dat'
mv './Path/c d.dat' './Path/20160622c d.dat'
mv './Path/CLY_BIZ_COM_PERD.dat' './Path/20160622CLY_BIZ_COM_PERD.dat'
mv './Path/jeff.dat' './Path/20160622jeff.dat'
Una vez que estés satisfecho, hazlo de verdad:
for f in ./Path/*.dat
do
mv "$f" "$(dirname "$f")/${key}$(basename "$f")"
done
... y el resultado:
$ ls -1 Path
20160622a.dat
20160622c d.dat
20160622CLY_BIZ_COM_PERD.dat
20160622jeff.dat