하이픈과 그 뒤의 모든 항목을 포함하여 파일 이름을 일괄 변경합니다.

하이픈과 그 뒤의 모든 항목을 포함하여 파일 이름을 일괄 변경합니다.

저는 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

관련 정보