내가 물었던 이전 질문을 확장하면 다음과 같습니다. 영숫자 파일 이름 바꾸기
확장자가 *_upstream인 하위 디렉터리가 포함된 디렉터리가 있습니다.
DHX30_vs_Control18.txt_events_without_u2af1_srsf2_altexons_upstream
GEMIN5_vs_Control19.txt_events_without_u2af1_srsf2_altexons_upstream
첫 번째 "_" 이후의 모든 항목을 제거하여 이름을 바꾸고 싶습니다.
DHX30
GEMIN5
답변1
for dir in ./*_*_upstream/
do
mv -- "$dir" "${dir%%_*}"
done
위의 루프는 패턴과 일치하는 현재 디렉터리의 모든 디렉터리를 선택합니다(후행 슬래시가 수행함): "(something) underscore (something) underscore upstream"). 그런 다음 가장 긴 일치 항목을 제거하기 위해 매개변수 확장을 사용하여 이러한 디렉터리의 이름을 바꿉니다. 즉, 첫 번째 밑줄과 그 뒤의 모든 항목을 제거하는 "밑줄(아무거나)"입니다.
예를 들어:
설정:
mkdir DHX30_foo_upstream
mkdir GEMIN5_vs_Cblah_upstream
touch DX31_foo_upstream
결과:
$ tree
.
├── DHX30
├── DX31_foo_upstream
└── GEMIN5
2 directories, 1 file
답변2
Linux의 경우:
rename -v 's/_.*//' *_upstream/