다음과 같은 일부 심볼릭 링크 파일과 일부 일반 파일이 있습니다.
P_2_UC34_31_1.gz
P_2_UC34_31_2.gz
P_2_UC34_32_1.gz
P_2_UC34_32_2.gz
P_2_UC34_33_1.gz
P_2_UC34_33_2.gz
P_2_UC34_31_1.gz
그리고 P_2_UC34_31_2.gz
심볼릭 링크입니다. 나머지 4개 파일은 일반 파일입니다(심볼릭 링크 아님).
모든 파일 _Ms
이전 과 내에 추가를 시도했습니다 _1
._2
심볼릭 링크의 경우 다음을 시도했습니다.
sed -i --follow-symlinks 's/_1/_Ms&/g' *.gz
그러나 그것은 작동하지 않았습니다. 오류가 발생하지 않으며 파일 이름도 변경되지 않습니다.
출력이 다음과 같기를 원합니다.
P_2_UC34_31_Ms_1.gz
P_2_UC34_31_Ms_2.gz
P_2_UC34_32_Ms_1.gz
P_2_UC34_32_Ms_2.gz
P_2_UC34_33_Ms_1.gz
P_2_UC34_33_Ms_2.gz
답변1
질문 작성자의 의견:
좋아요, 저는 이 방법을 사용했는데 효과가 있었습니다.
for file in *_1.gz; do
mv "$file" "${file%_1.fq.gz}_Ms_1.fq.gz";
done
또는 .rename
perl-rename
스크립트에서 무언가를 변경해야 하는 경우 몇 가지 사소한 수정이 필요합니다.
for file in *_1.fq.gz; do
mv "$file" "${file%_1.fq.gz}_Ms_1.fq.gz";
done
원래 문제에 대한 해결책은 다음과 같습니다.
for x in 1 2; do
for file in *_${x}.gz; do
mv "$file" "${file%_${x}.gz}_Ms_${x}.gz";
done
done
(복잡한 내부 표현은 시도해 볼 가치가 있습니다: file="aaaa_1.gz"; x=1; echo mv "$file" "${file%_${x}.gz}_Ms_${x}.gz"; echo output is mv aaaa_1.gz aaaa_Ms_1.gz
.)
나는 다음을 추가한다:
sed
문제는 (파일 이름을 바꾸지 않고 텍스트만 변경하는 것) 또는 심볼릭 링크(스크립트에 의해 이름이 잘 바뀌는 것)와 관련이 없습니다.
%
그게 대본에서 가장 좋은 부분이에요 "${file%_1.fq.gz}_Ms.....
. 거기에서 ${file}
변수의 내용이 확장되지만 (가능한 경우) 끝에서 문자열을 제거해야 함 file
을 나타냅니다 .%_1.fq.gz
_1.fq.gz
해당 부분이 _Ms.....
문자열에 추가되었습니다.