ディレクトリを平面化しますが、新しいファイル名にディレクトリ名を保持します。

ディレクトリを平面化しますが、新しいファイル名にディレクトリ名を保持します。

ディレクトリを次の形式にどのようにフラット化できますか?

今後:./aaa/bbb/ccc.png

後ろに:./aaa-bbb-ccc.png

ベストアンサー1

これにはすでに良い答えがありますが、次はより直感的だと思いますbash

find aaa -type f -exec sh -c 'new=$(echo "{}" | tr "/" "-" | tr " " "_"); mv "{}" "$new"' \;

aaa既存のディレクトリはどこにありますか?ここに含まれるファイルは現在のディレクトリに移動されます(aaaには空のディレクトリのみが残ります)。これら2つの呼び出しはtrディレクトリとスペースを処理します(スラッシュをエスケープする論理なし - 読者のための練習)。

私はこれがより直感的で比較的調整しやすいと思います。findつまり、.pngファイルのみを見つけるためにパラメータを変更できます。tr通話を変更するか、必要に応じて追加できます。正しく機能しているかどうかを視覚的に確認するには、echoまず追加し、追加の手順なしに問題が正しく表示される場合にのみ繰り返します。mvecho

find aaa -name \*.png -exec sh -c 'new=$(echo "{}" | tr "/" "-" | tr " " "_"); echo mv "{}" "$new"' \;

また、...または...の代わりにfind aaa...を使用したことに注意してください。後者の2つは最終ファイル名に興味深い痕跡を残すからです。find .find aaa/

おすすめ記事