소스에서 읽은 후 파일 배치 이름 바꾸기

소스에서 읽은 후 파일 배치 이름 바꾸기

천 개가 넘는 파일로 가득 찬 디렉토리가 있는데 이름이 약간 깁니다(이름 지정 스타일에서 패턴을 찾을 수 없습니다). 파일명을 단순화하고 싶습니다. 예를 들어:

Bioimage_23335989_Data_22317866_22317867_20140723_1002.pdb
Bioimage_22335990_Data_22318490_22318491_20140723_1009.pdb
Bioimage_23835970_Data_22317866_22317867_20140723_1005.pdb

.....등!

filelist.txt다음 내용으로 간단한 텍스트 파일( )을 만들었습니다 .

1.pdb   Bioimage_23335989_Data_22317866_22317867_20140723_1002.pdb
2.pdb   Bioimage_22335990_Data_22318490_22318491_20140723_1009.pdb
3.pdb   Bioimage_23835970_Data_22317866_22317867_20140723_1005.pdb

.....등!

누구든지 소스 파일을 읽고 이에 따라 파일 이름을 바꾸는 스크립트( 등)를 제공할 수 있습니까 awk? sed다른 곳에서도 유사한 스크립트를 얻을 수 있지만 나에게는 아무 것도 작동하지 않는 것 같습니다.

답변1

filelist.txt형식이 이미 완벽 하므로 awk 또는 sed가 필요하지 않습니다 .

몇 가지 미리 말씀드릴 점은... 파일 이름에 공백이 없고 각 줄의 두 파일 이름이 공백으로 구분되어 있다고 가정합니다. 또한 나는 가정한다filelist.txt 종료EOF 앞에 EOL이 있습니다.

물론 이 명령을 실행하기 전에 디렉터리를 백업해 두십시오.

#!/usr/bin/env bash
cd /path/to/pdb_files
while read -r line; do
  mv $line
done < /path/to/filelist.txt

설명하다

  • while read -r line; do: 파일의 각 줄을 반복하여 각 줄을 변수에 배치합니다 $line.
  • mv $line: 각 줄에는 공백으로 구분된 두 개의 파일 이름이 포함되어 있으므로 인수를 .i.e 에 직접 전달할 수 있습니다 mv. 그러면 파일이 첫 번째 파일 이름에서 두 번째 파일 이름으로 즉시 이동됩니다.

편집하다

방금 귀하의 질문을 다시 읽었습니다. 나는 이것을 파일 이름을 (예를 들어)에서 1.pdb으로 바꾸고 싶다는 뜻으로 해석합니다 Bioimage_23335989_Data_22317866_22317867_20140723_1002.pdb. 그 반대를 원하는지 잘 모르겠습니다. 그렇다면 아래 스크립트가 작동합니다.

#!/usr/bin/env bash
cd /path/to/pdb_files
while read -r line; do
  mv $(awk '{print $2, $1}' <<<$line)
done < /path/to/filelist.txt

설명하다

  • mv $(awk '{print $2, $1}' <<<$line): $line두 번째 필드를 읽고 인쇄한 다음 첫 번째 필드를 인쇄합니다. 이 두 파일 이름을 에 인수로 전달합니다 mv.

답변2

while read tname fname
do
  mv ${fname} ${tname}
done < filelist.txt

관련 정보