Có một kịch bản đơn giản để sao chép các tệp vào một thư mục mới dựa trên tệp csv không?


2

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.


2
Bạn có thể thêm một mẫu của tập tin cvs (chỉ một vài dòng) không?
nohillside

Câu trả lời:


3

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
  • các tập tin được sao chép vào /DESIRED/DIRECTORY\; là cần thiết để chấm dứt exec chỉ huy

1

Đâ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).


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.