この質問は他にも尋ねられる質問です。
私はたくさんのフォルダを持つディレクトリを持っていて、ピリオドを使ってすべての単語を区切ります。
のように:foo.bar.2011.useless.words
最後の2つの単語は、常に無駄なものなので、私は最後の2番目の期間から始めると切り捨てたいと思います。
ない文言の確認...
多くのおかげbashスクリプトを使用して1つのディレクトリにファイル名を切り捨てる
0
A
答えて
1
for file in *.*.*
do
mv "$file" "${file%.*.*}"
done
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
一つのマイナー批判: '*。*。* /'の 'for file 'を使用して、パターンマッチングをディレクトリに限定することを望みます。今度は 'this.is.a.file'と一致するでしょう – SiegeX
ありがとう、私を混乱させる1つのこと:" *。*。*のファイルでは、実際に何個の "。例えば、フォルダ名が6かそこらの "。"の場合? – fightermagethief
@bboyreason '*。*。*'は、少なくとも* 2ドットの名前のファイルやフォルダにマッチします。私はイグナシオのコメントで言及したように、 '*。*。* /'を使用するので、ファイル名ではなく少なくとも2つのドットを持つフォルダにマッチする。 – SiegeX