Linuxコマンドを使用して.htmlファイルの名前を古いディレクトリ名に変更するには? [閉鎖]

Linuxコマンドを使用して.htmlファイルの名前を古いディレクトリ名に変更するには? [閉鎖]

これは私のディレクトリ構造で、最初の2つのディレクトリ名のみに基づいて指定されたディレクトリrevの下の.htmlファイル名を変更したいと思います。これを行うには、コマンドをどのように使用できますか?

    prj3
    |-- blk1
    |   |-- blk1.config
    |   |-- blk1.html
    |   |-- checklist13
    |   |   |-- checklist13.config
    |   |   |-- checklist13.html
    |   |   |-- checklist13.html~
    |   |   `-- rev2
    |   |       |-- rev2.config
    |   |       `-- rev2.html
    |   |-- checklist14
    |   |   |-- checklist14.config
    |   |   |-- checklist14.html
    |   |   |-- checklist14.html~
    |   |   `-- rev5
    |   |       |-- rev5.config
    |   |       |-- rev5.html
    |   |       `-- rev5.html~

予想出力:

    prj3
    |-- blk1
    |   |-- blk1.config
    |   |-- blk1.html
    |   |-- checklist13
    |   |   |-- checklist13.config
    |   |   |-- checklist13.html
    |   |   |-- checklist13.html~
    |   |   `-- rev2
    |   |       |-- rev2.config
    |   |       `--checklist_13_rev2.html
    |   |-- checklist14
    |   |   |-- checklist14.config
    |   |   |-- checklist14.html
    |   |   |-- checklist14.html~
    |   |   `-- rev5
    |   |       |-- rev5.config
    |   |       |-- checklist_14_rev5.html
    |   |       `-- rev5.html~

rev* フォルダー内のすべての rev*.html ファイルに対してのみ、同じ期待される出力が必要です。

ベストアンサー1

findbasename以下は、およびの組み合わせを使用する単一のライナーですdirname

find . -regex '.*/rev[0-9]+/rev[0-9]+.html' -exec sh -c 'mv -iv {} $(dirname {})/$(basename $(dirname $(dirname {})))_$(basename $(dirname {})).html' \;

デフォルトでは、find regexを使用してrev#/ rev#.htmlで終わるパスを取得し、この組み合わせを使用して新しい名前を構成し、dirnamebasenameディレクトリと親ディレクトリの親ディレクトリ名を抽出します。

おすすめ記事