Đệ quy tìm tất cả các tệp của thư mục con và liên kết chúng với tên thư mục chứa của chúng


1

Hy vọng điều đó là có thể, tôi muốn quét tất cả các tệp trong các thư mục con của

/home/user/source/

và tạo liên kết tượng trưng cho các tệp này trong một thư mục khác với phần mở rộng tệp khác. Vì vậy, tôi bắt đầu với cấu trúc thư mục này:

/home/user/source/folder1/random_file_name.bin
/home/user/source/folder2/random_file_name.bin
/home/user/source/folder3/random_file_name.bin
...

Và tôi muốn tạo liên kết tượng trưng cho các tệp bin như sau:

/home/user/dest/folder1.txt -> /home/user/source/folder1/random_file_name.bin
/home/user/dest/folder2.txt -> /home/user/source/folder2/random_file_name.bin
/home/user/dest/folder3.txt -> /home/user/source/folder3/random_file_name.bin
...

Tôi có thể làm điều này chỉ trong một vòng lặp hay tôi phải quét từng thư mục "nguồn" để trích xuất tên thư mục sau đó lặp trong mỗi thư mục để tìm tệp bin trong mỗi thư mục? Chỉ có một tệp bin cho mỗi thư mục, với một tên ngẫu nhiên.

Trừ khi có một cách để làm điều này với lệnh "tìm"?


Điều gì sẽ xảy ra nếu có một tập tin thứ hai, nói , folder1?
Eric Renouf

Tôi không biết, tôi không biết nếu nó thậm chí có thể xảy ra. Tôi đoán các tệp của "thư mục 1" sẽ được sắp xếp theo thứ tự bảng chữ cái để lần quét cuối cùng sẽ ghi đè lên liên kết tượng trưng bằng tham số -sf, điều này rất tốt vì các tệp chứa dấu thời gian trong tên
NaturalBornCamper

Câu trả lời:


1
for d in $(find source -type d); do ls $d/*.bin 1>/dev/null 2>&1 && ln -s $d/*.bin target/$(basename $d).dat;done

Trong chậm mo:

  • Quét các thư mục
  • nếu thư mục chứa ít nhất một tệp .bin
  • liên kết tệp bin bằng tên thư mục

Wow tất cả trong một dòng cảm ơn! Và +1 cho các giải thích :)
NaturalBornCamper

Điều này sẽ không hoạt động nếu bất kỳ thư mục nào chứa khoảng trắng hoặc các ký tự khác IFSvì vậy hãy cẩn thận với loại câu trả lời này
Eric Renouf
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.