2011-07-11 15 views
5

Tengo una lista como la siguiente, en un archivo llamado lista.txt:Cambiar el nombre de una lista de archivos con los nombres de otra lista

mickey 
donald 
daffy 
bugs 

tengo una carpeta que contiene muchos archivos: nombrearchivo1, nombrearchivo2, .. . filenameN.

Quiero recorrer esos archivos para lograr:

filename1 => mickey 
filename2 => donald ... 

¿Me permite un trabajo código de ejemplo para esta tarea?

+1

¿Tiene algún criterio para mapear los archivos de la carpeta en cadenas? Estoy preguntando esto porque: si usas let para decir 'ls' para obtener los archivos, serás ordenado alfabéticamente, pero eventualmente, puedes tener un mapeo diferente' filename_X => string_Y' –

Respuesta

6

No es mi estilo hacer su trabajo por usted. Preferiría que publicaras lo que ya has intentado, así que puedo ayudarte a depurarlo, pero este problema es tan fácil que voy a morder de todos modos.

x=1; for y in $(cat lista.txt); do mv $y filename$x; let x=$x+1; done 
+0

Lo siento, cometí un terrible error en mi pregunta . Los nombres reales de los archivos no están numerados, sino informales. NO f1, f2 ... fn. PERO f_a, f_pippo, f123 y así sucesivamente ... ¿Cómo puedo interactuar con las dos listas? –

1
let "count=1" 

for newname in $(cat lista.txt); do 
    mv "filename$count" "$newname" 
    let "count++" 
done 
3

utilizando matrices bash:

files=(*) 
i=0 
while read -r new_name; do 
    mv "${files[$i]}" "$new_name" 
    ((i++)) 
done < lista.txt 
1

Solía ​​doble redirección con nuevos descriptores de archivo para cambiar el nombre de todos los archivos FLAC de un directorio de acuerdo con un "filelist.txt" dada esta manera:

while read -u 9 filename ; do 
    read -u 8 newname 
    echo mv "$filename" "$newname" 
done 9<<<"$(ls -1 *flac)" 8< filelist.txt 

Cada nombre de archivo .flac en el directorio pasa por el descriptor de archivo 9 a la variable "nombre de archivo" mientras está en el sam e iteración, cada línea del filelist.txt pasa por el descriptor 8 de archivo a la variable "newname".

Sí, uno de los nuevos descriptores de archivos podría haberse evitado y simplemente utilizar la entrada estándar predeterminada (eliminando "-u 9" y "9"), pero me acostumbré a no usar stdin para esos; De esta forma, puede incluir una instrucción de lectura dentro del ciclo de interactividad o control, y no se completará con los datos redirigidos.

El eco es para "prueba solamente" y se debe eliminar después de aprobar la operación.

Cuestiones relacionadas