일부 데이터 파일이 있는데 파이프라인에 맞게 이름을 바꾸고 싶습니다.
파일은 다음과 같습니다.
{unique_ids}_{experiment_condition}_L{3_digit_number}.txt
다음과 같이 파일 이름 끝, 확장자 앞에 실험 조건 플래그가 표시되도록 이름을 바꿔야 합니다.
{unique_ids}_L{3_digit_number}_{experiment_condition}.txt
Unique_ids 및 Experiment_condition의 길이는 고정되어 있지 않습니다.
예:
ghad312fd2_Mb_L002.txt
이 되다 ghad312fd2_L002_Mb.txt
.
감사합니다!
답변1
Perl 기반 rename
유틸리티를 사용하여 현재 디렉터리에서 이 패턴과 일치하는 모든 파일 ./*_*_*.txt
(즉, 이름에 두 개 이상의 밑줄이 포함되고 로 끝나는 모든 파일 .txt
)의 이름을 바꿉니다.
rename -n 's/([^_]+)_([^_]+)\.txt$/$2_$1.txt/' ./*_*_*.txt
파일 이름 접미사를 제외하고 파일 이름의 마지막 두 밑줄로 구분된 부분을 바꿉니다 .txt
. -n
올바른 작업을 수행하는 것으로 보이는지 확인한 후 제거하여 실제로 실행하십시오.
답변2
쉘 포함 zsh
:
autoload zmv
zmv -n '(*)(_*)(_L[0-9](#c3))(.txt)' '$1$3$2$4'
( -n
만족하면 삭제(테스트 실행)).
[0-9](#c3)
3개의 ASCII 10진수 시퀀스와 일치합니다. 또한 이를 사용하여 <0-999>
0부터 999까지의 숫자(0000123과도 일치할 수 있음) 또는 <->
모든 숫자(하나 이상의 ASCII 10진수 시퀀스)를 일치시킬 수 있습니다.
답변3
또한 시도
for FN in gh*; do IFS="_." read ID XC NR EXT <<< "$FN"; echo mv -- "$FN" "${ID}_${NR}_${XC}.${EXT}"; done
read
"string here"에 있는 각 파일 이름의 4개 변수를 사용하고 이를 기반으로 새 파일 이름을 재구성합니다 . echo
보시는 내용이 마음에 드시면 삭제하세요.
답변4
unique_ids
밑줄이 없다고 가정하고 이를 스크립트에 넣고 GNU sed
또는 기타 sed
지원되는 스크립트를 사용하여 실행 -E
하고 파일 이름을 인수로 전달합니다.
#!/bin/bash
for f in "$@" ; do
new_name=$(echo "$f" | sed -E 's/([^_]+)_(.+)_(L[0-9]{3})\.txt/\1_\3_\2.txt/g')
echo "$f -> $new_name"
mv "$f" "$new_name"
done