파일 이름을 사용하여 변수 이름 지정

파일 이름을 사용하여 변수 이름 지정

이름이 Pocket_???_????_?.pdb_OUTPUT.txt????_? 형식이고 디렉터리가 ????_???? 형식인 파일이 있습니다. 일부를 복사해야 합니다. 예를 들어, 파일 목록이 있고 이 파일을 최종 디렉터리에만 복사하고 싶습니다.

예를 들어:

file.txt:

Pocket_001_1b47_A.pdb_OUTPUT.txt
Pocket_002_1b47_A.pdb_OUTPUT.txt
Pocket_001_2cl5_B.pdb_OUTPUT.txt
Pocket_001_4rtl_A.pdb_OUTPUT.txt

이러한 파일은 각각 자체 디렉토리( 1b47_A, 2cl5_B4rt1_A)에 있으며 각 디렉토리로 이동하여 다른 대상에 복사하고 싶습니다. 문제는 파일 이름을 기준으로 디렉터리를 표시하는 방법을 모른다는 것입니다.

이 스크립트를 사용해 보았는데 잘 작동하지만 사람이 많아서 모든 디렉토리를 처리하는데 시간이 오래 걸립니다.

for dir in ????_?; 
    do cd $dir/; 
       while read file; 
       do cp $file /home/tommaso/cp_file/; done < /home/tommaso/file.txt ; 
    cd .. ; cd .. ; done

파일 이름에 포함된 디렉터리에서만 파일을 검색하도록 스크립트에 지시하고 싶습니다. 어떻게 해야 하나요?

답변1

이는 옵션일 수 있습니다.

while IFS= read -r file; do 
  dir="${file%%.*}"
  cp "${dir#*_*_}/$file" /home/tommaso/cp_file/
done < file.txt

답변2

및 를 함께 사용하여 인쇄할 수 있습니다 awk.directory/filenamexargscp -t DIRECTORY SOURCE...

awk -F"[_.]"  '{printf "%s_%s/%s\n",$3,$4,$0}' file.txt \
| xargs -d '\n' cp -t /home/tommaso/cp_file/

관련 정보