ファイル名とディレクトリ名のハッシュパターンを置き換える方法

ファイル名とディレクトリ名のハッシュパターンを置き換える方法

今メモをバックアップしました。コンセプト、ノート名にハッシュコードを使用して明らかに一意にします。

たとえば、以下は、いくつかのコメントを含むコメントフォルダです。

Archive e74f698cb73b42c790d08999bdbe47e4
├── Note 1 cda63bef095a493f9847d516cf34fa5f.md
├── Note 2 dda63bef095a493f9847d516cf34fa5f.md

(時には.csvフォームファイルでもあります)

パターンを置き換えるために正規表現を使用しようとしていますが、これはうまくいきませ[a-z0-9]{32}s/

find -type f -print0 | xargs -0 rename 's/[a-z0-9]{32}//g'

-print0(そしてその目的が何であるかよくわかりません-0。)

上記のコードはファイルでのみ機能しますが、同様のアプローチを試しましたが、うまくいきませんmv $f ${f:0:-34}でした。 sを使わずにファイルとフォルダを1行に置き換える方法はありますかfor

私はStackOverflowでこの質問に対する他の多くの答えを試しましたが、これまでに見つけたほとんどすべての答えはファイルを扱うか、固定語をパターンとして使用します。

Mass-Moveコマンドラインツール()を使用したいのですが、mmvArch Linux用の公式ディストリビューションはありませんか?

ベストアンサー1

注:以下は、「ファイルへの適用」を観察したようにPerlベースのコマンドをrename使用していると仮定しています。rename 's/[a-z0-9]{32}//g'バラより


ディレクトリとファイルを見つけるには、制限を削除する必要があります-type f

また、ファイルを含める前にディレクトリの名前が変更されないようにする必要があります。 GNUを使用すると、奥行き優先巡回を指定してfindこれを実行できます。-depth

rename最後に、コマンドがパスコンポーネントではなくファイルのデフォルト名でのみ機能していることを確認する必要があります。rename実装はこれを行うオプション(例えば、、、-d--filename--nopath提供することができますが、タスクを通して直接呼び出すことも--nofullpathできます。renamefind-execdir

だから

find . -depth -execdir rename -n 's/ [a-z0-9]{32}//' {} +

-n提案された代替案に満足したら削除してください)。gファイルごとのパターンの単一インスタンスを置き換えるために置換フラグは必要ありません。

[a-z0-9]で置き換えることを検討してください[[:xdigit:]]

また見なさい:

おすすめ記事