複数のファイル名から特定の文字の後の文字列を削除するには?

複数のファイル名から特定の文字の後の文字列を削除するには?

私のフォルダには、この名前の形式のファイルが複数あります。

01. file one-sdvanv-12lknl.srt
01. file one-sdvanv-12lknl.mp4
02. file two-afdsmakl-asdfafdaf.srt
02. file two-afdsmakl-asdfafdaf.mp4
03. file three-adfadaasd-asdfadfafad-adad1d1das.srt
03. file three-adfadaasd-asdfadfafad-adad1d1das.mp4

-これで、ファイル名が次のように見えるように次の文字列を削除するにはどうすればよいですか?

01. file one.srt
01. file one.mp4
02. file two.srt
02. file two.mp4
03. file three.srt
03. file three.mp4

答え1

for file in *; do
    ext=.${file##*.}                #Gets file extension
    [ "$ext" = ".$file" ] && ext="" #If file had no extension, set it to empty string
    nostr=${file%%-*}               #Remove everything after -
    mv "$file" "$nostr$ext"
done

答え2

次のようにbashパラメーター置換を使用できます。

for i in *; do
  # ${i%%-*} get everything before the first '-' (use ${i%-*} for the last '-')
  # ${i/.*} remove everything after the '.'
  # ${i##${i%.*}} remove everything except everything after the last '.'
  mv "${i}" "${i%%-*}${i##${i%.*}}"
done

答え3

次のループを使用してくださいbash

for name in *.mp4 *.srt; do
    mv -i -- "$name" "${name/-*./.}"
done

これは変数置換によって機能し、.mp4名前の最初のダッシュと最後のポイントの間の部分をポイントに変更し、各ファイルとファイルの名前を変更します。.srt

あなたの質問に表示されるファイルなので、特に.mp4ファイルを選択することにしました。.srt

ポータブルshループを使用してください。

for name in *.mp4 *.srt; do
    mv -i -- "$name" "${name%%-*}.${name##*.}"
done

ここでは${name%%-*}、最初のダッシュの後のすべての内容が切り捨てられた元の名前になり、${name##*.}ファイル名の最後のドットの後のファイル名のサフィックスになります。


Perlユーティリティの使用rename:

$ tree
.
|-- 01. file one-sdvanv-12lknl.mp4
|-- 01. file one-sdvanv-12lknl.srt
|-- 02. file two-afdsmakl-asdfafdaf.mp4
|-- 02. file two-afdsmakl-asdfafdaf.srt
|-- 03. file three-adfadaasd-asdfadfafad-adad1d1das.mp4
`-- 03. file three-adfadaasd-asdfadfafad-adad1d1das.srt

0 directory, 6 files
$ rename 's/-.*\././' -- *.mp4 *.srt
$ tree
.
|-- 01. file one.mp4
|-- 01. file one.srt
|-- 02. file two.mp4
|-- 02. file two.srt
|-- 03. file three.mp4
`-- 03. file three.srt

0 directory, 6 files

Perl式は、s/-.*\././与えられた各ファイル名に適用され、ファイル名を変更するための置換です。

これを変更すると、ファイル名の最初のダッシュから最後の点までの部分が点に置き換えられます。

-nユーティリティ呼び出しに加えて、renameまず何が起こるかを確認できます。

また見なさい:

関連情報