У меня есть коллекция каталогов, которые все содержат определенный файл, который называется одинаково во всех каталогах.
dir1/dirA/file.txt
dir1/dirB/file.txt
dir1/dirC/file.txt
....
dir4/dirX/file.txt
dir4/dirY/file.txt
dir4/dirZ/file.txt
Я хочу скопировать эти файлы в другой каталог, чтобы имя каждого файла было именем его родительского каталога:
all_files/
dirA.txt
dirB.txt
dirC.txt
....
dirX.txt
dirY.txt
dirZ.txt
Хотя я понимаю, что эти примеры могут вызвать наложение, это не проблема для меня - я знаю, что все целевые каталоги имеют уникальные имена.
Я использую Bash в OS X. Я попытался сделать несколько вещей, как это (см. Здесь и здесь). Я хотел бы разбить строку на слешах, получить от второго до последнего и использовать это, но я не смог заставить его работать (основываясь на этом и других):
for name in `ls */*/file`
directory=${DIRS[${#DIRS[@]} - 2]}
mv name ../all_files/${directory}.txt
done
Однако я не мог заставить его работать.