2016-10-19 6 views
1

現在、古いxServeのコンテンツをSynology NASに移動していて、クライアントは10年前にファイル名とフォルダの前に1つ以上のスペースを追加して、 。 すべてをSynology NASに移動するときに、このために多くのエラーが発生しています。ファイル名とフォルダを再帰的に削除する前にスペースを削除する

私の理想的な解決策は、名前の前にスペースのみを削除して残りの部分を残すスクリプトを作成することです。

私は別の同様のスレッドhereを見つけましたが、名前にどこにあるかに関係なくスペースを削除します。他のスレッドからのスクリプトが

find /tmp/ -depth -name "* *" -execdir rename 's/ /_/g' "{}" \;

で誰もがアイデアを持っていますか?

ありがとうございました!

+1

先頭スペースに*のみ*異なるファイル名はないと仮定できますか?たとえば、 'file.txt vs' file.txt '? – chepner

+2

*検索*: 's/^/...'に開始マーカーを追加しますか?たとえばグローバル置換を削除します。 gを '/ g'に入れます。 –

答えて

1

ありがとうございます。 Jean-Baptiste Yunèsの助けを借りて、私は完全に動作するこのコマンドを得ることができました。あなたのすべての協力に感謝します!

find /your-folder/ -depth -name "* *" -execdir rename 's/^ *//' "{}" \; 
1

これはあなたが求めていることを行うはずです。

0

そのようなことはトリックを行う必要があります。

for i in "/path/to/directory with spaces/"* ; do 
    dirname="$(dirname "$i")" # replace with the hardcoded path if you want 
    newname="$(echo "$i" | sed "s|$dirname/ \+|$dirname/|")" 
    # redirect to /dev/null if there are collisions or files without leading spaces 
    mv "$i" "$newname" 2>/dev/null 
done 

あなたはonelinerとしてそれを書くことができますが、それは"で何とか乱雑に見えます。ディレクトリを$1に置き換えてスクリプトにラップすることをお勧めします。

関連する問題