Удалить подкаталог из пути и перевести файлы в родительский каталог

Удалить подкаталог из пути и перевести файлы в родительский каталог

У меня есть куча файлов, которые содержат в своем пути дублированную папку (в следующих примерах bar). Я хотел бы удалить этот каталог и переместить все содержимое contains в родительский каталог. Чтобы использовать поиск и замену в качестве метафоры, я хотел бы заменить /foo/на /в пути.

Начальное состояние:

foo/bar/some_file.txt
foo/another_file.txt
quux/bar/yet_another_file.txt

Цель:

foo/some_file.txt
foo/another_file.txt
quux/yet_another_file.txt

Я предпочитаю решать эту проблему с помощью bash, но был бы открыт для любого решения, не имеющего никаких зависимостей и работающего на Linux.


Если это будет полезно для тех, кто наткнется на эту ветку, вотсуществующий ответ для Windowsс помощью robocopy.

решение1

Я решил эту проблему следующим образом:

for iteration_path in ${1}/*; do
  if [[ ! -z $iteration_path ]]; then
    mv "${iteration_path}"/bar/* "${iteration_path}";
    rmdir "${iteration_path}"/bar;
  fi
done

Если кто-то может расширить предложения AFH по поводурасширение параметра, мне было бы интересно, если бы это было более элегантное решение.

Связанный контент