2011-07-11 18 views
5

Mam listę jak poniżej, w pliku o nazwie lista.txt:Zmiana nazwy pliku z listy nazwisk z innej listy

mickey 
donald 
daffy 
bugs 

Mam folder zawierający wiele plików: plik1, plik2, .. nazwa plikuN.

Chcę iterację tych plików osiągnąć:

filename1 => mickey 
filename2 => donald ... 

możesz mi zapewnić pracę przykładowy kod dla tego zadania?

+1

Czy masz jakieś kryteria mapowania plików w folderze na ciągi? Pytam o to, ponieważ: jeśli użyjesz, powiedz 'ls', aby uzyskać pliki, otrzymasz posortowane alfabetycznie, ale ostatecznie możesz mieć inne mapowanie' filename_X => string_Y' –

Odpowiedz

6

To nie jest mój styl, aby wykonać pracę za Ciebie. Wolałbym, żebyście opublikowali to, co już wypróbowaliście, więc mogę pomóc w debugowaniu, ale ten problem jest tak prosty, i tak zamierzam ugryźć.

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

Przepraszamy, popełniłem straszny błąd w moim pytaniu . Rzeczywiste nazwy plików nie są numerowane, ale przypadkowe. NOT f1, f2 ... fn. ALE f_a, f_pippo, f123 i tak dalej ... Jak mogę wejść w interakcję z tymi dwoma listami? –

1
let "count=1" 

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

Korzystanie tablice bash:

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

Użyłem podwójne przekierowanie z nowych deskryptorów plików do nazwy wszystkich plików flac o katalogu według danej „filelist.txt” w ten sposób:

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

Każda nazwa pliku .flac w katalogu przechodzi przez deskryptor pliku 9 do zmiennej "nazwa pliku", podczas gdy w sam W iteracji, każda linia pliku filelist.txt przechodzi przez deskryptor pliku 8 do zmiennej "newname".

Tak, jednego z nowych deskryptorów plików można było uniknąć i po prostu użyć domyślnego standardowego wejścia (usuwając "-u 9" i "9"), ale przyzwyczaiłem się, aby nie używać stdin; w ten sposób możesz dołączyć do pętli wyrażenie do odczytu dla interaktywności lub kontroli, a nie zostaną one wypełnione przez przekierowane dane.

Echo jest "tylko do testu" i powinno zostać usunięte po zatwierdzeniu operacji.

Powiązane problemy