私はLinuxを使用しており、ファイルは次のようになります。
10154-person134_bacteria_640.jpeg
10163-NORMAL2-IM-0141-0001.jpeg
10175-person147_bacteria_707.jpeg
2555-person1_virus_12.jpeg
25562-person132_bacteria_632.jpeg
25566-person143_bacteria_687.jpeg
次のように見えるようにする必要があります。
10154.jpeg
10163.jpeg
10175.jpeg
2555.jpeg
25562.jpeg
25566.jpeg
awkを試しましたが、問題が発生しました。
答え1
すでにインストールされている場合perl-rename
(DebianやUbuntuを含む多くのシステムにあるrename
)、次のことができます。
$ rename -n 's/(.+?)-.*\./$1./' *jpeg
10154-person134_bacteria_640.jpeg -> 10154.jpeg
10163-NORMAL2-IM-0141-0001.jpeg -> 10163.jpeg
10175-person147_bacteria_707.jpeg -> 10175.jpeg
2555-person1_virus_12.jpeg -> 2555.jpeg
25562-person132_bacteria_632.jpeg -> 25562.jpeg
25566-person143_bacteria_687.jpeg -> 25566.jpeg
予想される出力が表示されたら、-n
実際にファイル名を変更せずにコマンドを再実行してください。
または、シェルで次のことを実行できます。
$ for file in *jpeg; do echo mv -- "$file" "${file%%-*}.jpeg"; done
mv -- 10154-person134_bacteria_640.jpeg 10154.jpeg
mv -- 10163-NORMAL2-IM-0141-0001.jpeg 10163.jpeg
mv -- 10175-person147_bacteria_707.jpeg 10175.jpeg
mv -- 2555-person1_virus_12.jpeg 2555.jpeg
mv -- 25562-person132_bacteria_632.jpeg 25562.jpeg
mv -- 25566-person143_bacteria_687.jpeg 25566.jpeg
繰り返しますが、期待どおりに印刷されたら、echo
実際にファイル名を変更せずにコマンドを実行してください。
答え2
名前変更ユーティリティがインストールされていない場合は、直接インストールできます。
perl -e 'rename $_, s/-.*\././r for @ARGV' ./*.jpeg
あるいは、 sed ツールと xargs ツールの GNU バージョンを使用して、\0
ファイル名の問題を軽減するためにヌルバイトのサフィックスを追加します。
printf '%s\0' *.jpeg |
sed -ze 'p;s/-.*\././' |
xargs -r0 -n2 -t mv --
答え3
またはawkを使用したい場合
#!/bin/sh
files="10154-person134_bacteria_640.jpeg
10163-NORMAL2-IM-0141-0001.jpeg
10175-person147_bacteria_707.jpeg
2555-person1_virus_12.jpeg
25562-person132_bacteria_632.jpeg
25566-person143_bacteria_687.jpeg"
for f in $files; do
name=`echo $f | awk -F- '{print $1}'`
echo $name.jpeg
done