2016-07-13 124 views
1

我有一個for循環來列出目錄中的文件,然後根據它們的名稱將它們移動到各個適當的文件夾。重新評估每次運行的for循環條件

說有300個文件象下面這樣:

  1. Prefix_filename1_suffix1_date.txt - 100個文件
  2. Prefix_filename101_suffix2_date.txt - 150個文件
  3. Prefix_filename251_suffix3_date.txt - 50個文件

我會只需知道循環開始處的文件的前綴和文件夾位置:

cd folder_location 
for f in $(ls ${file_prefix}*); do 

當我輸入for循環後,文件名會被我知道 - 這是一個挑戰。

我使用正則表達式找到所有文件共有的後綴,然後使用awk獲得前綴和後綴之間的文件名。所以要使用正則表達式awk我需要文件名通過for循環。

在處理這些文件時,我將所有相似的文件一起移動,所以(如果有三組文件),文件可能會在3次運行中移動(比如說第1,101和251次),另外297次運行不要做任何事情,因爲沒有要處理的文件,因爲它已經列出了300個文件 - 最初循環運行了300次。

我該如何避免這種情況?並讓循環運行3次。

+0

你可以發佈你的for循環? f($ ls $ {file_prefix} *)中的 –

+1

;做 – zeushvk

+0

我在for循環之前做一個cd folder_location – zeushvk

回答

0

假設文件名只在給定的地方,那些下劃線(而不是在前綴,或後綴),只是cut第三場,(即後綴)和sort -u ,我們有我們的三個後綴 es。管道,以一個循環,mv匹配文件到他們的特設子目錄。

cd folder_location 
echo ${file_prefix}*.txt | cut -d '_' -f 3 | sort -u | \ 
while read suffix ; do 
    [ -d ${suffix} ] || mkdir ${suffix} 
    mv ${file_prefix}*_${suffix}_*.txt ${suffix}/ 
done