2011-01-22 13 views
0

この質問は他にも尋ねられる質問です。
私はたくさんのフォルダを持つディレクトリを持っていて、ピリオドを使ってすべての単語を区切ります。
のように:foo.bar.2011.useless.words
最後の2つの単語は、常に無駄なものなので、私は最後の2番目の期間から始めると切り捨てたいと思います。
ない文言の確認...
多くのおかげbashスクリプトを使用して1つのディレクトリにファイル名を切り捨てる

答えて

1
for file in *.*.* 
do 
    mv "$file" "${file%.*.*}" 
done 
+0

一つのマイナー批判: '*。*。* /'の 'for file 'を使用して、パターンマッチングをディレクトリに限定することを望みます。今度は 'this.is.a.file'と一致するでしょう – SiegeX

+0

ありがとう、私を混乱させる1つのこと:" *。*。*のファイルでは、実際に何個の "。例えば、フォルダ名が6かそこらの "。"の場合? – fightermagethief

+0

@bboyreason '*。*。*'は、少なくとも* 2ドットの名前のファイルやフォルダにマッチします。私はイグナシオのコメントで言及したように、 '*。*。* /'を使用するので、ファイル名ではなく少なくとも2つのドットを持つフォルダにマッチする。 – SiegeX

0

ドットを使用してフォルダが一つだけレベルの深さであれば、イグナシオの答えを持って行きます。ただし、サブディレクトリにある名前を変更するフォルダが/toplevel/subdir1/foo.bar.baz.blah/の場合は、下にあるfindコマンドを使用する必要があります。 Bash 4.xがある場合を除き、shopt -s globstarオプションを使用できます。

find /top/level/dir -type d -name '*.*.*' -exec sh -c 'for arg; do echo mv "$arg" "${arg%.*.*}"; done' _ {} + 

あなたは何も変更せずにドライランを行うことができますので、私はそこにechoを追加しました。出力に満足すればechoを削除し、再度実行して変更を永続的にします。あなたはそれのように感じる場合

編集 臆面もなく助けをイグナシオのPE

+0

おかげで、貴重なツール疑いを盗むことで、私の$tmp VARを削除し、おそらく上記のコメントでの質問に答える... – fightermagethief