1

У меня есть структура папок в каталоге, что-то вроде:

/ 
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

Я хочу скопировать все файлы abc.json и поместить их в одну папку New_Folder, но переименовать их в процессе, чтобы я знал, откуда взялся каждый abc.json.

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 

..... и так далее

Как я могу добиться этого с помощью сценария оболочки. Я использую Ubuntu 14.04

1 ответ1

0

Это предполагает, что вы уже прошли cd на уровне, который хотите сохранить в названии. Вы можете перепроверить, используя 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

Предполагая, что вы сделали папку ../NewFolder уже следующая команда должна скопировать все файлы json и поместить подкаталог 1-го уровня в новое имя. Просто убедитесь, что все 4 строки вставлены в ваш терминал одновременно!

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’

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .