ディレクトリとファイルの名前を変更するコマンドで問題が発生しています。
- オペレーティングシステム:MACOS 11.4
_
- 試してみるコマンド:
find . -maxdepth 1 -iname "* *" -exec sh -c 'fichier="{}"; mv -- $fichier ${fichier// /_}' \;
find
私は一度に1レベルの深さのディレクトリツリーをナビゲートできるようにしたいので、これを使います。
このコマンドの結果は次のとおりです。
usage: mv [-f | -i | -n] [-v] source target
mv [-f | -i | -n] [-v] source ... directory
だからmv
私はecho
コマンドをチェックするために使用しません
find . -maxdepth 1 -iname "* *" -exec sh -c 'fichier="{}"; echo $fichier ${fichier// /_}' \;
これは期待通りに動作するようです。
./Job offers etc ./Job_offers_etc
./School results ./School_results
./Famille et Souvenirs ./Famille_et_Souvenirs
./KID education ./KID_education
./Template Open Office-MS Office ./Template_Open_Office-MS_Office
./Mode Emplois ./Mode_Emplois
./cartres de voeux ./cartres_de_voeux
私がそれを使用したときに何が間違っていましたかmv
?
ベストアンサー1
現在経験している状況は、これが推奨される理由の1つです。(ほぼ)常にシェル変数を引用します。。
あなたの場合、シェル変数にfichier
スペースを含むファイル名を指定したので、変数を「現状のまま」使用すると、シェルはトークン化を実行します。つまり、引数であるディレクトリは次のようになります$fichier
。 3つのファイルを宛先ディレクトリに移動します(1)。Job offers etc
mv
Job
offers
etc
Job_offers_etc
この問題を回避するには、に示すように変数参照の周りに二重引用符を入れます"$fichier"
。
(1)これは実際に危険です。ターゲットディレクトリが存在しない場合、このコマンドは3つのファイル名を同じ名前に変更して、最初の2つのファイルを3番目のファイルで上書きできます。