Tạo thư mục con và sắp xếp các tệp theo ngày


7

Tôi có một số thư mục của các tệp được sao chép từ camera an ninh của tôi mà tôi muốn tổ chức vào các thư mục con theo ngày của tệp. Ví dụ;

-rwxrwxrwx 0 root root 4935241 Jul 19  2012 DSCN1406.JPG
-rwxrwxrwx 0 root root 4232069 Jul 19  2012 DSCN1407.JPG
-rwxrwxrwx 0 root root 5015956 Jul 20  2012 DSCN1408.JPG
-rwxrwxrwx 0 root root 5254877 Jul 21  2012 DSCN1409.JPG

Tôi muốn một đoạn script chạy để xem các tệp trong thư mục đó, sau đó tạo 3 thư mục cần thiết có tên như;

drwxrwxrwx 1 root root     0 Sep  2 16:49 07-19-2012
drwxrwxrwx 1 root root     0 Sep  2 16:49 07-20-2012
drwxrwxrwx 1 root root     0 Sep  2 16:49 07-21-2012

Và sau đó di chuyển các tập tin vào các thư mục thích hợp. Có ai có bất kỳ đề nghị về một cách tốt kịch bản để thực hiện điều này?


GNU findhoặc GNU statcó sẵn không?
jordanm

Câu trả lời:


17

Trên Linux và Cygwin, bạn có thể sử dụng date -rđể đọc ngày sửa đổi của tệp.

for x in *.JPG; do
  d=$(date -r "$x" +%Y-%m-%d)
  mkdir -p "$d"
  mv -- "$x" "$d/"
done

(Tôi sử dụng định dạng YYYY-MM-DD rõ ràng, chuẩn và dễ sắp xếp cho các ngày.)


Gilles hoàn hảo một khi tôi thả vỏ .jpg nó hoạt động rất đẹp. Cảm ơn bạn!
Richard Ahlquist

1
Tôi không biết datetính năng này, +1.
jordanm

Định dạng ngày ngắn hơn, giống như% Y-% m-% d:date +%F
ingopingo

0

Dưới đây là failafe, vì nó đi vào đường dẫn thư mục và tổ chức các tệp bên trong thư mục, chỉ kiểm tra xem đối tượng được tổ chức có phải là một tệp hay không.

dir="mention the directory path"; cd "$dir" ; for x in *; do if [ -f "$x" ]; then d=$(date -r "$x" +%Y/%B/%d) && mkdir -p "$d" && mv -- "$x" "$d/"; fi; done
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.