Di chuyển tệp cụ thể từ tất cả các thư mục con và đổi tên dựa trên thư mục con


1

Tôi có một cấu trúc thư mục trong một thư mục giống như:

/ 
A, B/Subdir Level 1/ Subdir L2/Folder A/abc.json
A, C/Subdir Level 1/ Subdir L2/Folder A/abc.json
A, D/Subdir Level 1/ Subdir L2/Folder A/abc.json 
A, F/Subdir Level 1/ Subdir L2/Folder A/abc.json 
A, G/Subdir Level 1/ Subdir L2/Folder A/abc.json 
B, Z/Subdir Level 1/ Subdir L2/Folder A/abc.json 
C, F/Subdir Level 1/ Subdir L2/Folder A/abc.json

Tôi muốn sao chép tất cả các tệp abc.json và đặt chúng vào một thư mục New_Folder nhưng đổi tên chúng trong quy trình để tôi biết mỗi abc.json đến từ đâu.

New_Folder/ 
A, B_abc.json (or A, Babc.json...don't really care as long as A, B appear) 
A, C_abc.json 
A, D_abc.json 

..... vân vân

Làm thế nào tôi có thể đạt được điều này với một kịch bản shell. Tôi sử dụng Ubuntu 14.04

Câu trả lời:


0

Điều này là giả sử rằng bạn đã đạt cdđến cấp độ mà bạn muốn giữ tên. Bạn có thể kiểm tra lại bằng cách sử dụng find:

find -type f -iname abc.json
./A, B/Subdir Level 1/Subdir L2/abc.json
./A, C/Subdir Level 1/Subdir L2/abc.json
./A, F/Subdir Level 1/Subdir L2/abc.json

Giả sử bạn đã tạo thư mục ../NewFolder, lệnh sau sẽ sao chép tất cả các tệp json và đặt thư mục con cấp 1 vào tên mới. Chỉ cần đảm bảo dán tất cả 4 dòng vào thiết bị đầu cuối của bạn cùng một lúc!

find -type f -iname \*.json | while read x; do
 dirname="$(echo "$x" | sed -r 's_^\.?/?__;s_/.*__')";
filename="$(echo "$x" | sed -r 's_.*/__')";
cp -v "$x" "../NewFolder/$dirname - $filename"; done

‘./A, B/Subdir Level 1/Subdir L2/abc.json -> ‘../NewFolder/A, B - abc.json
‘./A, C/Subdir Level 1/Subdir L2/abc.json -> ‘../NewFolder/A, C - abc.json
‘./A, F/Subdir Level 1/Subdir L2/abc.json -> ‘../NewFolder/A, F - abc.json
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.