サンプルファイル:
RBFATL001USCGA002.--K1234--
RCAVTL001USCGA043.--K2135--
出力:
RBFATL001USCGA002
RCAVTL001USCGA043
答え1
常にサイクルがあります。たぶんループを隠すツールが欲しいということでしょうか?
perl
その後、s rename
(prename
またはとも呼ばれる)を使用できますperl-rename
。
rename 's/\.[^.]+\.*\z//s' ./*.*
または、zsh
次のようになりますzmv
。
autoload zmv
zmv '(*).[^.]##.#' '$1'
デフォルトでは、これらのファイルは隠しファイル(名前で始まるファイル)の名前を変更しません.
。これらも処理するには、次のようにします。
zmv '(?*).[^.]##.#(#qD)' '$1'
.foo.bar.
に拡張があると思う人(そして拡張がないと.bar.
思う人)。 ()foo...
に変更を検討したい場合は、これを調整してください。私はあなたがそれを考慮したくないと思います(これは削除されます(しかしファイル名が空になることができないので失敗します))。.
zmv '(?*).*(#qD)' '$1'
.foo.bar.
zmv '*(#qD)' '${f%%.*}'
また、file.tar.gz
拡張は考慮されて.gz
いないと見なされます.tar.gz
。
これを再帰的に実行します。
zmv '(**/)(?*).[^.]##.#(#qD)' '$1$2'
または以下を使用してrename
:
find . -depth -name '?*.*' -exec rename 's/\.[^./]+\.*\z//s' {} +
答え2
ループを使わずにこれを行う方法は次のとおりです。
find . -type f -name "?*.*" -exec sh -c 'mv -v "$0" "${0%.*}"' '{}' \;