これらのフォルダ内のすべてのフォルダとフォルダの名前を変更して、フォルダ名の下線がすべて空白に置き換えられるようにします。あなたはそれで私を助けることができますか?フォルダを再帰的に名前を変更するBashスクリプト
答えて
/dirとまではい、単にCD:
ディストリビューションに依存しfind -depth -type d -execdir rename 's/_/ /g' {} \;
、あなたはperlの名前の変更(時々prename)が必要です。
file $(type -p rename)
出力が悪く見えること、ELFが含まれている場合;)
編集 -depthと-execdirは-execdir
を使用しています答えは簡単ですが、唯一の意志
を追加しましたPOSIX only specifies -exec
以降、find
のバージョンで、-execdir
(GNU findなど)をサポートしています。
bashを使いたいのであれば、find
が検索しているディレクトリの名前を変更するので、これは驚くほど難しいことです。あなたが注文権を得たとしても、find
に-depth
オプションを使用して、パスの最後のコンポーネントだけをそれぞれ-exec
に書き換えるようにする必要があります。次はone of the examples given in the Bash FAQの些細な変化であると私のためにOKに動作するようです:
find . -depth -name "*_*" -exec bash -c 'dir=${1%/*} base=${1##*/}; mv "$1" "$dir/${base//_/ }"' _ {} \;
よくある質問の答えは、再帰的に関心のあるフォルダに名前を付けるの問題の詳細な議論をしていること。
更新:そのワンライナーはかなり複雑であるので、それは説明の利益のために少しそれを破壊する価値があるかもしれません。基本的に、find
コマンドは次のとおりです。
find . -depth -name "*_*" -exec bash -c [SOME-STUFF] _ {} \;
、アンダースコアが含まれている、このような各ディレクトリのために、最も深いで始まるすべてのディレクトリを見つけ、(_
としてパラメータ0で、bashスクリプトを実行します[SOME-STUFF]
それを気にしないことを示すため)、見つかったファイルの名前としてパラメータ1を使用します。 (find
は-exec
後{}
のファイル名に置き換えます\;
をちょうど-exec
実行するコマンドを終了します。)
を次に[SOME-STUFF]
部分がで構成されています
dir=${1%/*}
... parameter expansionを使用しています、 (ファイル名)の末尾から/*
の最短一致を削除し、結果にdir
を設定します。同様に、この部分は:
base=${1##*/}
... $1
の開始から*/
の最長一致を削除し、その結果にbase
を設定します。したがって、base
はパスの最後のコンポーネントに過ぎません。再度、パラメータ展開、${parameter/pattern/string}
構文を使用して、この時間を利用し
mv "$1" "$dir/${base//_/ }"
:
その後、名前の変更は、実際にあるmv
コマンドによって行われます。ファイル名($1
)の名前が$dir
に変更され、その後に$base
が追加されますが、$base
のアンダースコアはスペースで置き換えられます。
置き換えの値(この場合のスペース)を呼び出し元のスクリプトからの変数にしたい場合はどうすればよいですか?例: $ SOMEVARは動作しません。見つける。 -depth -name "* _ *" -exec bash -c 'dir = $ {1%/ *} base = $ {1 ## * /}; mv "$ 1" "$ dir/$ {base // _/$ SOMEVAR}" '_ {} \; –
あなたはbash4を持っている場合は、あなたが実行することができます:
for i in **; do [[ -d "$i" ]] || continue; mv "$i" "${i/_/ }"; done
- 1. Bash - データベース値から再帰的にファイルの名前を変更
- 2. Bashスクリプト:ファイルアクセス権を再帰的に変更する
- 3. bashのディレクトリ名を再帰的に変更する
- 4. ディレクトリ内の特定のファイルの名前を再帰的に変更する - シェル/ Bashスクリプト
- 5. ディレクトリを再帰的に名前を変更する方法
- 6. Powershellで再帰的に名前を変更するファイル
- 7. Pythonスクリプトは、フォルダとサブフォルダ内のすべてのファイルの名前を再帰的に変更します
- 8. ファイルの名前を再帰的に変更して文字を削除する
- 9. PowerShellの名前を変更する特別なディレクトリを再帰的に
- 10. vbscript regexを使用してファイルの名前を再帰的に変更する
- 11. バッチスクリプトを使用してフォルダ内のファイルとサブフォルダの名前を再帰的に変更します。
- 12. ファイルをサブディレクトリに名前を変更するBashスクリプト - ファイル名に基づいて
- 13. ファイルの名前を変更するためのBashスクリプト
- 14. サフィックス付きのファイルの名前を変更するBashスクリプト
- 15. bashスクリプト - 2つのディレクトリに再帰的に反復する
- 16. 同じ名前のフォルダにファイルを並べ替えるBashスクリプト
- 17. ディレクトリ内のファイル名を再帰的に変更する
- 18. Bash:再帰的にサブディレクトリを再作成
- 19. スクリプトを再帰的にサーバー
- 20. bashのフォルダ、ファイル、サブフォルダの名前を変更
- 21. xlsxをcsvに再帰的に変換するbash
- 22. Powershell再帰的なファイル名の読み込みと名前変更
- 23. public_htmlフォルダの名前を変更する
- 24. バッシュは、現在のフォルダと#名前#サブフォルダに私のような、bashのnoobのための再帰的
- 25. ファイルの名前を変更して別のフォルダに移動するためのBashスクリプト
- 26. 特殊文字をエスケープしてファイル名の名前を再帰的に変更するシェルスクリプト?
- 27. Forループを再帰的メソッドに変更
- 28. Bash 4.3+ - 再帰的フィボナッチ
- 29. 一致する文字列でFolderNamesやファイル名の名前を変更する方法を再帰的
- 30. コピー後にフォルダの名前を変更
「foo_barは/ baz_quuxは」find' 'によって出力される前に、「foo_barは」が見つかりと名前が変更されますので、これは動作しません - 後者はしません名前の変更が試行されたときに検出されます。 –
大したことではなく、 '-depth'スイッチを追加して見つけることができます。 –
はい、-depth added;) –