2016-07-13 59 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