ファイル名を変更し、ダブルスペースを単一のスペースに変更するスクリプトが必要です。

ファイル名を変更し、ダブルスペースを単一のスペースに変更するスクリプトが必要です。

誰かがディレクトリ名から二重スペースを削除する方法を見つけるのに役立ちますか?

名前にスペースを含むファイルのディレクトリ構造を提供するサービスを使用しています。場合によっては、ディレクトリ名に二重スペースが含まれていて、一部のホームブルースクリプトがそれを処理できないことがあります。

ディレクトリ名を変更し、二重スペースを削除するシェルコマンドの組み合わせが必要です。 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(必要なしxargsfind -exec良い):

find ~/Downloads/Scala_Intro -name '*  *' -exec sh -c 'mv "$1" "${1//  / }"' find-sh {} \;

おすすめ記事