簡體   English   中英

linux創建目錄並將相應文件移動到目錄

[英]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進行mkdirmv文件的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM