Thách thức của chúng tôi là chúng tôi cần tìm kiếm và sao chép khoảng 3000 hình ảnh vào một thư mục mới.
Danh sách tên hình ảnh là một tệp csv. Các tập tin đều nằm trên một ổ đĩa, nhưng trong nhiều thư mục khác nhau.
Thách thức của chúng tôi là chúng tôi cần tìm kiếm và sao chép khoảng 3000 hình ảnh vào một thư mục mới.
Danh sách tên hình ảnh là một tệp csv. Các tập tin đều nằm trên một ổ đĩa, nhưng trong nhiều thư mục khác nhau.
Câu trả lời:
Sử dụng Bash:
#!/bin/bash
cat /path/to/file.csv | while IFS=, read col1 col2 col3
do
find . -path "$col1" -exec cp {} /DESIRED/DIRECTORY \;
done
IFS
là dấu phân cách trường đầu vào. Khai báo như ,
cho .csv
. find . -path
tìm kiếm thông qua thư mục nhà của bạn đệ quy cho tên
đọc từ col1
, trả lại con đường đầy đủ. exec
thực hiện cp
lệnh trên {}
, đại diện cho tất cả các kết quả find
trả lại /DESIRED/DIRECTORY
và \;
là cần thiết để chấm dứt exec
chỉ huy Đây là một kịch bản python đơn giản sẽ thực hiện thủ thuật:
import csv, subprocess
csv_path = '/Users/mdryden/Desktop/test2/test.csv'
search_path = '/Users/mdryden/Desktop/test2/'
output_path = '/Users/mdryden/Desktop/test3/'
with open(csv_path, 'rb') as csvfile:
dialect = csv.Sniffer().sniff(csvfile.read(1024))
csvfile.seek(0)
reader = csv.reader(csvfile, dialect)
for line in reader:
subprocess.call(["find", search_path, "-name", line[0],
"-exec", "cp", "{}", output_path,";"])
Đặt csv_path, search_path và output_path tương ứng. Đó là bất kỳ định dạng CSV tiêu chuẩn từ xa nào, nó có thể tự động phát hiện ra. CSV không nên có hàng tiêu đề và bạn cần đặt line[0]
đến số cột chứa tên tệp (bắt đầu từ 0 cho cột đầu tiên).
tôi sẽ dùng bản thảo .
Mở tệp csv trong excel lấy các tệp, sau đó chuyển biến đến thiết bị đầu cuối nơi bạn sẽ thực thi find
lệnh theo sau là một copy
lệnh vào thư mục của sự lựa chọn của bạn.
Đây là một số gợi ý:
Vòng qua csv.