![Переместить несколько файлов из нескольких каталогов в место назначения относительно источника](https://rvso.com/image/109260/%D0%9F%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D0%B8%D1%82%D1%8C%20%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%20%D0%B8%D0%B7%20%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85%20%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2%20%D0%B2%20%D0%BC%D0%B5%D1%81%D1%82%D0%BE%20%D0%BD%D0%B0%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%20%D0%B8%D1%81%D1%82%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B0.png)
Имея следующую файловую иерархию:
dir
├── dirA
│ └── snapshot
│ └── subdir1
│ └── file1
└── dirB
└── snapshot
└── subdir2
└── file2
Я хочу переместить файлы из каждого каталога snapshot/subdir в родительский каталог snapshot одной командой. Это будет:
dir
├── dirA
│ └── file1
│ └── snapshot
│ └── subdir1
└── dirB
└── file2
└── snapshot
└── subdir2
Я пробовал mv dir/*/snapshot/*/* ../../
, но поскольку место назначения ../../
указывается относительно рабочего каталога, это, очевидно, не работает.
Возможно ли это с помощью команд bash (поскольку я никогда не писал ни одной строчки скрипта bash)?
решение1
На основании проницательного наблюдения @Don_Christ этот ответ был отредактирован, тем самым сохранив подоболочку:
for i in dir/*/snapshot; do
mv "$i"/*/* "$i"/..
done