내 디렉토리에 다음 파일이 있습니다.
GE.AARS_vs_Control16.txt
GE.DHX30_vs_Control18.txt
GE.DNAJC2_vs_Control18.txt
파일 이름을 다음으로 바꾸도록 제거 *_Control<numeric>
하고 교체하고 싶습니다 .*_Others
GE.AARS_vs_Others.txt
GE.DHX30_vs_Others.txt
GE.DNAJC2_vs_Others.txt
답변1
for file in /dir/*.txt; do
mv "$file" "${file%_*}_Others.txt"
done
이는 마지막 매개변수부터 모든 것을 ${file%_*}
제거하는 쉘 매개변수 확장의 한 형태입니다 ._
답변2
Perl rename
도구를 사용하여 이름을 바꾸려는 파일과 동일한 디렉터리에 있다고 가정합니다.
rename 's/_Control1[68]/_Others/' GE.*_Control1[68].txt
답변3
약간의 난독화가 마음에 들면 다음과 같은 또 다른 접근 방식이 있습니다.
paste <(ls) <(ls | sed 's/_Control1[68]/Others') | sed 's/^/mv /' | bash
먼저, bash 없이 파이프라인을 실행해 보세요. :-) 디렉터리에 다른 파일이 없다고 가정합니다. 그렇다면 각각을 또는 이와 유사한 것으로 대체하여 ls
목록 ls *Controll1[68].txt
을 제한하십시오.
"나는 프로그램을 작성하는 것보다 프로그램을 작성하기 위한 프로그램을 작성하고 싶습니다" - Richard Sites
(Alan Perlis라고 맹세할 수 있지만 Google은 이에 동의하지 않습니다.)