Câu hỏi Cách di chuyển chỉ một lượng hình ảnh cụ thể từ một thư mục


Tôi có một thư mục có 200.000 hình ảnh. Tôi muốn làm như sau:

  1. Di chuyển số lượng ảnh X (50 hình ảnh, 100 hình ảnh, 200 hình ảnh) từ thư mục đó sang thư mục Y.
  2. Mỗi thư mục Y có thể là một số (Thư mục 1, Thư mục 2, Thư mục 3 ...).
  3. Kết quả cuối cùng có thể trông giống như sau:

Thư mục 1 (Có số lượng hình ảnh X) Thư mục 2 (Có số lượng hình ảnh X) Thư mục 3 (Có số lượng hình ảnh X) Thư mục 4 (Có số lượng hình ảnh X)


4
2017-10-16 00:15


gốc




Các câu trả lời:


Chạy tập lệnh trong thư mục hình ảnh của bạn. Đảm bảo rằng đích không có bất kỳ thư mục con nào.

IMG = 100 # Số ảnh cần di chuyển
DES = "." # Nơi Đến

I = $ (tìm. -Maxdepth 1 -mindepth 1-type f | wc -l)
N = $ (((I / IMG) + (I% IMG)))
eval mkdir "$ DES" / Thư mục {01 .. $ N}

với i bằng $ (tìm "$ DES" -maxdepth 1 -mindepth 1-type d | sort); làm
    mv $ (tìm. -maxdepth 1 -mindepth 1-type f | sắp xếp | grep -m $ IMG '. *') $ i
làm xong

3
2017-10-16 10:06



Hi Basharat, kịch bản là tốt nhưng không hoạt động. Nó ném lỗi "dòng 9: / bin / ls: Danh sách đối số quá dài" vì hình ảnh 200K. - Luis Alvarado♦
@LuisAlvarado cố định. - Basharat Sialvi


Hãy thử tập lệnh này, nó sẽ đáp ứng yêu cầu của bạn nhưng các tệp X cuối cùng sẽ vẫn còn trong thư mục gốc

OrigDIR = ~ / FolderX
DestDIR = ~ / Thư mụcY
NumberOfMovedItems = $ 1
SubDestDir = $ 2
Đếm = 1

trong khi [`tìm $ DIR -OrigDIR 1-type f | wc -l` -gt $ NumberOfMovedItems]; làm
  NewSubDir = $ DestDIR / $ {SubDestDir} $ {Đếm}
  mkdir $ NewSubDir
  tìm $ OrigDIR -maxdepth 1-type f | head -n $ NumberOfMovedItems | xargs -I {} mv {} $ NewSubDir
  để Count ++
làm xong

Thay đổi đường dẫn của FolderX và FolderY như bạn muốn.

Khi bạn chạy tập lệnh, bạn phải cung cấp số lượng mục cần di chuyển và tên của Thư mục con

Nguồn


1
2017-10-16 05:45



Kịch bản như nó, không hoạt động. Đã thêm $ 1 và $ 2. Đã kiểm tra tập lệnh bạn đã đề cập trong liên kết và tập lệnh đang hoạt động. Nếu bạn có thể, vui lòng chỉnh sửa câu trả lời của bạn để sửa kịch bản. - Luis Alvarado♦


Tôi sẽ bắt đầu bằng việc tạo danh sách

ls X > X.list
for Y in `seq 1 10` ; do mkdir $Y ; mv `head -n $(( Y * 50 )) X.list | tail -n 50` $Y ; done

0
2017-10-16 04:59