Linux

使用文件名命名變數

  • January 26, 2021

我有一個具有這種格式名稱的文件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_A2cl5_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

我想告訴腳本僅在文件名中包含的目錄中搜尋文件。我怎樣才能做到這一點?

這可能是一個選項:

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

您可以使用和一起awk列印:directory/filename``xargs``cp -t DIRECTORY SOURCE...

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

引用自:https://unix.stackexchange.com/questions/631086