파일 이름의 일부 이름 바꾸기
다음과 같은 파일이 많이 있습니다.
DET01-ABC-5_50-001.dat
...
DET01-ABC-5_50-0025.dat
이렇게 생겼으면 좋겠어요.
DET01-XYZ-5_50-001.dat
...
DET01-XYZ-5_50-0025.dat
이거 어떻게 해?
이름 변경 명령어에는 몇 가지 종류가 있습니다.이 경우 다음과 같이 간단합니다.
rename ABC XYZ *.dat
Perl regex를 사용하는 버전이 있을 수 있습니다.
rename 's/ABC/XYZ/' *.dat
for file in *.dat ; do mv $file ${file//ABC/XYZ} ; done
아니요.rename또는sed필요했다.bash 매개 변수 확장만 하면 됩니다.
이런 거면 될 거야.그for캡처하는 파일 이름에 따라 루프를 변경해야 할 수 있습니다.
for fspec1 in DET01-ABC-5_50-*.dat ; do
fspec2=$(echo ${fspec1} | sed 's/-ABC-/-XYZ-/')
mv ${fspec1} ${fspec2}
done
이러한 스크립트는 항상 데이터 복사본 및 전혀 다른 디렉토리에서 테스트해야 합니다.
sed http://unixhelp.ed.ac.uk/CGI/man-cgi?sed 사용법을 배워야 합니다.
또, 파일 엔트리를 루프 할 수 있도록 하기 위해서, http://www.cyberciti.biz/faq/bash-for-loop/ 를 사용합니다.
명령어는 다음과 같습니다. 옆에 용어가 없어서 확인할 수 없습니다.
for i in `dir` do mv $i `echo $i | sed '/orig/new/g'`
난 세드랑 하는 게 좋아고객님의 경우:
for x in DET01-*.dat; do
echo $x | sed -r 's/DET01-ABC-(.+)\.dat/mv -v "\0" "DET01-XYZ-\1.dat"/'
done | sh -e
실행 대상을 확인하려면 먼저 "sh - e" 부분을 생략하는 것이 가장 좋습니다.
이 대답들은 모두 간단하고 좋다.단, false positive를 찾을 수 있도록 항상 이러한 스크립트에 인터랙티브모드를 추가합니다.
if [[ -n $inInteractiveMode ]]
then
echo -e -n "$oldFileName => $newFileName\nDo you want to do this change? [Y/n]: "
read run
[[ -z $run || "$run" == "y" || "$run" == "Y" ]] && mv "$oldFileName" "$newFileName"
fi
또는 인터랙티브모드를 디폴트로 하고 자동 스크립트용 또는 과감한 스크립트용 Force 플래그(-f | --force)를 추가합니다.이 경우에도 속도가 크게 느려지지 않습니다.기본 응답은 "yes, I do want to rename"이므로 프롬프트마다 Enter 키를 누를 수 있습니다(이 때문에).-z $run시험.
언급URL : https://stackoverflow.com/questions/1392768/renaming-part-of-a-filename
'programing' 카테고리의 다른 글
| 언로드로 사용자 폼을 닫지 않음 (0) | 2023.04.19 |
|---|---|
| XAML 에서 범용 타입을 지정할 수 있습니까(전).NET 4 프레임워크)? (0) | 2023.04.19 |
| CSV/Excel에 가장 적합한 타임스탬프 형식? (0) | 2023.04.19 |
| DataTemplate에서 상위 DataContext에 액세스합니다. (0) | 2023.04.19 |
| 어떤 WPF 책을 추천하시겠습니까? (0) | 2023.04.19 |