【发布时间】:2016-07-13 17:28:01
【问题描述】:
我有一个for 循环来列出目录中的文件,然后根据它们的名称,将它们移动到各种适当的文件夹中。
假设有 300 个文件,如下所示:
- Prefix_filename1_suffix1_date.txt - 100 个文件
- Prefix_filename101_suffix2_date.txt - 150 个文件
- Prefix_filename251_suffix3_date.txt - 50 个文件
我只会知道循环开始时文件的前缀和文件夹位置:
cd folder_location
for f in $(ls ${file_prefix}*); do
在我进入for 循环后,我会知道文件名——这是一个挑战。
我使用 regex 来查找所有文件共有的后缀,然后使用 awk 来获取前缀和后缀之间的文件名。所以要使用 regex 和 awk 我需要文件名通过 for 循环。
在处理这些文件时,我将所有相似的文件一起移动,因此(如果有三组文件),这些文件可能会在 3 次运行中移动(比如说第 1、101 和 251 次),而其他 297 次运行则不要'不做任何事情,因为没有要处理的文件,因为它列出了 300 个文件——最初循环运行了 300 次。
如何避免这种情况?并使循环仅运行 3 次。
【问题讨论】:
-
你能发布你的for循环吗?
-
for f in $(ls ${file_prefix}*);做
-
我在 for 循环之前做了一个 cd folder_location
-
“进入 for 循环后我会知道文件名”是什么意思?
-
我使用正则表达式查找所有文件通用的后缀,然后使用 awk 获取前缀和后缀之间的文件名。因此,要使用正则表达式和 awk,我需要文件名通过 for 循环