2011-07-11 30 views
5

tôi có một danh sách như sau, trong một tập tin gọi là lista.txt:Đổi tên một danh sách các tập tin với những cái tên từ một danh sách khác

mickey 
donald 
daffy 
bugs 

Tôi có một thư mục chứa nhiều tập tin: filename1, filename2, .. . filenameN.

Tôi muốn lặp thông qua các tập tin để đạt được:

filename1 => mickey 
filename2 => donald ... 

Bạn có thể cung cấp cho tôi làm việc mẫu mã cho nhiệm vụ này?

+1

Bạn có bất kỳ tiêu chí nào để ánh xạ các tệp trong thư mục tới chuỗi không? Tôi hỏi điều này bởi vì: nếu bạn sử dụng hãy nói 'ls' để lấy các tệp, bạn sẽ được sắp xếp theo thứ tự abc, nhưng cuối cùng, bạn có thể có ánh xạ khác 'filename_X => string_Y' –

Trả lời

6

Nó không phải là phong cách của tôi để làm công việc của bạn cho bạn. Tôi muốn bạn đăng những gì bạn đã thử, vì vậy tôi có thể giúp bạn gỡ lỗi nó, nhưng vấn đề này là dễ dàng như vậy, tôi sẽ cắn anyway.

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

Xin lỗi, tôi đã mắc phải một sai lầm khủng khiếp trong câu hỏi của mình . Các tên tập tin thực sự không được đánh số mà là bình thường. KHÔNG f1, f2 ... fn. NHƯNG f_a, f_pippo, f123 v.v ... Làm cách nào tôi có thể tương tác với hai danh sách? –

1
let "count=1" 

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

Sử dụng các mảng bash:

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

tôi đã sử dụng chuyển hướng kép với mô tả tập tin mới để đổi tên tất cả các file flac của một thư mục theo một "filelist.txt" nhường chỗ này:

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

Mỗi tên tệp .flac trên thư mục đi qua bộ mô tả tệp 9 đến biến "tên tệp" trong khi nhập mẫu e iteration, mỗi dòng của filelist.txt đi qua bộ mô tả tập tin 8 đến biến "newname".

Có, một trong các bộ mô tả tệp mới có thể tránh được và chỉ cần sử dụng đầu vào tiêu chuẩn mặc định (xóa "-u 9" và "9"), nhưng tôi đã quen với việc không sử dụng stdin cho những người đó; theo cách đó bạn có thể bao gồm một câu lệnh đọc bên trong vòng lặp cho tương tác hoặc điều khiển và nó sẽ không được lấp đầy bởi dữ liệu được chuyển hướng.

Tiếng vọng là dành cho "chỉ thử nghiệm" và phải bị xóa sau khi phê duyệt thao tác.

Các vấn đề liên quan