パスからサブディレクトリを削除し、ファイルを親に昇格する

パスからサブディレクトリを削除し、ファイルを親に昇格する

パス内に重複したフォルダー (次の例 ) を含むファイルがたくさんあります。このディレクトリを削除し、含まれるすべてのコンテンツを親に移動したいと思います。検索と置換をメタファーとして使用するには、パス内のを にbar置き換えます。/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の提案についてさらに詳しく説明できる方がいらっしゃいましたらパラメータ拡張それがよりエレガントな解決策であるかどうか興味があります。

関連情報