Linux
使用文件名命名變數
我有一個具有這種格式名稱的文件
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_B
)4rt1_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/