
誰かがディレクトリ名から二重スペースを削除する方法を見つけるのに役立ちますか?
名前にスペースを含むファイルのディレクトリ構造を提供するサービスを使用しています。場合によっては、ディレクトリ名に二重スペースが含まれていて、一部のホームブルースクリプトがそれを処理できないことがあります。
ディレクトリ名を変更し、二重スペースを削除するシェルコマンドの組み合わせが必要です。 sed 's/ / /g'
.
幸いなことに、子ディレクトリを持たない親ディレクトリも名前を変更する必要があります。
この候補者を見つけることができます。
sh> find ~/Downloads/Scala_Intro -name '* *' -print
/Users/jimka/Downloads/Scala_Intro/SCALAIN_E-Running Average-362/Edward Cacioppo_2973_assignsubmission_file_
/Users/jimka/Downloads/Scala_Intro/SCALAIN_E-Implement histogram-3169/Edward Cacioppo_3102_assignsubmission_file_
xargs
ただし、を使用してこの一連の行を操作しようとすると、置換は二重xargs
スペースを削除するように見えます。したがって、コマンドラインを生成できません。mv old-name new-name
sh> find ~/Downloads/Scala_Intro -name '* *' -print | xargs -I % echo %
/Users/jimka/Downloads/Scala_Intro/SCALAIN_E-Running Average-362/Edward Cacioppo_2973_assignsubmission_file_
/Users/jimka/Downloads/Scala_Intro/SCALAIN_E-Implement histogram-3169/Edward Cacioppo_3102_assignsubmission_file_
次のようなことを試していますが、うまくいきません。
sh> find ~/Downloads/Scala_Intro -name '* *' -print | xargs -p -I % mv "%" `echo "%" | sed 's/ / /g'`
mv /Users/jimka/Downloads/Scala_Intro/SCALAIN_E-Running Average-362/Edward Cacioppo_2973_assignsubmission_file_ /Users/jimka/Downloads/Scala_Intro/SCALAIN_E-Running Average-362/Edward Cacioppo_2973_assignsubmission_file_?...
xargsがコマンドを実行するかどうかを尋ねると、二重mv
スペースは単一のスペースに変換されました。
答え1
xargs
そして代わりにツールをmv
好むrename
。
使用している名前変更ツールによって異なります。
find ~/Downloads/Scala_Intro -name '* *' -exec rename -n ' ' ' ' {} +
または
find ~/Downloads/Scala_Intro -name '* *' -exec rename -n 's/ / /' {} +
(-n
出力が満足な場合は、オプション(模擬実行)を削除して実際に名前を変更します。)
または使い続けたい場合mv
(必要なしxargs
、find -exec
良い):
find ~/Downloads/Scala_Intro -name '* *' -exec sh -c 'mv "$1" "${1// / }"' find-sh {} \;