今メモをバックアップしました。コンセプト、ノート名にハッシュコードを使用して明らかに一意にします。
たとえば、以下は、いくつかのコメントを含むコメントフォルダです。
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コマンドラインツール()を使用したいのですが、mmv
Arch Linux用の公式ディストリビューションはありませんか?
答え1
注:以下は、「ファイルへの適用」を観察したようにPerlベースのコマンドをrename
使用していると仮定しています。rename 's/[a-z0-9]{32}//g'
バラより
ディレクトリとファイルを見つけるには、制限を削除する必要があります-type f
。
また、ファイルを含める前にディレクトリの名前が変更されないようにする必要があります。 GNUを使用すると、奥行き優先巡回を指定してfind
これを実行できます。-depth
rename
最後に、コマンドがパスコンポーネントではなくファイルのデフォルト名でのみ機能していることを確認する必要があります。rename
実装はこれを行うオプション(例えば、、、-d
)--filename
を--nopath
提供することができますが、タスクを通して直接呼び出すことも--nofullpath
できます。rename
find
-execdir
だから
find . -depth -execdir rename -n 's/ [a-z0-9]{32}//' {} +
(-n
提案された代替案に満足したら削除してください)。g
ファイルごとのパターンの単一インスタンスを置き換えるために置換フラグは必要ありません。
[a-z0-9]
で置き換えることを検討してください[[:xdigit:]]
。
また見なさい: