私は複数のサブディレクトリを持っていますが、各ディレクトリの名前の末尾に時間が含まれています。これを削除したいです。見つけることができるショートカットがありますか?
.
├── ACRA
│ └── acra2017-12-25 16:01:57
├── Activiti
│ └── Activiti2017-05-02 17:15:37
到着
.
├── ACRA
│ └── acra2017-12-25
├── Activiti
│ └── Activiti2017-05-02
答え1
find . -type d -name '*[0-2][0-9]:[0-5][0-9]:[0-5][0-9]' -exec sh -c '
for d; do mv -- "$d" "${d% *}"; done
' findsh {} +
実際にスクリプトを実行する前に、echo
との間に追加して、正しい操作が適用されていることを確認できます。do
mv
mv
-type d
:ディレクトリのみを選択-name '*[0-2][0-9]:[0-5][0-9]:[0-5][0-9]'
:名前の末尾に時間がある場合にのみ一致するグローバルパターン。for d; do mv -- "$d" "${d% *}"; done
:見つかったディレクトリごとにこのmv
アクションを適用し、名前を変更します。ファイル名から${d% *}
最後のスペースの後のすべての内容(および含む)を削除します。
答え2
find
Perlユーティリティの使用rename
:
find . -type d -name "* [0-9][0-9]:[0-9][0-9]:[0-9][0-9]" \
-exec rename -n 's/ \d{2}:\d{2}:\d{2}$//' {} \;
-n
出力が期待どおりに表示されたら、オプションを削除します。