[英]linux create directories and move corresponding files to the directories
我有一個文本文件,列出了目錄名稱以及應包含的文件。
my text file:
SRS000111 ERR1045156
SRS000112 ERR1045188
SRS000123 ERR1045204
SRS000134 ERR1045237 ERR1045238 ERR1045239
SRS000154 ERR1045255 ERR1045256
SRS000168 ERR1045260 ERR1045261 ERR1045262
... ... ...
SRS001567 ERR1547451 ERR1547676
現在,我想使用文本文件的第一列創建所有目錄,但是我不知道如何執行for循環。
for filename in cat file.txt | awk -F, '{print $1}'; do mkdir ${filename}; done
但這會出錯。
第二,我擁有所有的ERR文件,我想根據文本文件將其移動到相應的目錄。 我不知道該怎么做。
您必須從awk進行mkdir
和mv
文件的system
調用
這個awk會做
awk 'FNR>1{system("mkdir \"" $1 "\""); for(i=2; i<=NF; i++) system("mv \"" $i "\" " "\"" $1 "\"")}' file
FNR>1
因為我們不想為第一行創建目錄,即您的CSV文件中的標題名稱
注意:從存在您的源/輸入文件中提到的所有文件名的目錄中運行此命令。 這將在其中創建目錄,並將所有文件移動到這些新創建的目錄中。
我建議您閱讀文件,拆分文件夾名稱列和文件名稱列,並進行目錄和移動。
該腳本使其:
#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
dir=$(echo "$line" | awk '{print $1}')
files=$(echo "$line" | awk '{$1=""; print $0}')
mkdir $dir
mv $files $dir/
done < myfile.txt
並不復雜,但是如果您有任何疑問,可以問我任何問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.