Symlink 파일에서 sed를 사용하는 방법은 무엇입니까?

Symlink 파일에서 sed를 사용하는 방법은 무엇입니까?

다음과 같은 일부 심볼릭 링크 파일과 일부 일반 파일이 있습니다.

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

또는 .renameperl-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.....문자열에 추가되었습니다.

관련 정보