获取特定编号之后的文件夹列表

获取特定编号之后的文件夹列表

我有一个文件夹,其子文件夹命名约定类似于yyyymm例如 200801、200803 等。我想通过命令行方式列出 201412 之后的文件夹以上传到 S3。有办法做到吗?

答案1

列出目录内容,通过管道输出到 awk,仅打印那些值大于或等于所需日期的内容,通过管道到 xargs s3。

ls | awk '$1 >= 201412 {print $1}' | xargs -n1 YOUR_S3_COPY_COMMAND -options

如果是很多目录和文件,可以将 xargs 与 -P 并发进程数并行化。

ls | awk '$1 >= 201412 {print $1}' | xargs -n1 -P20 YOUR_S3_COPY_COMMAND -options

答案2

您当前的要求是列出子目录名称 201412,即201501或更晚。

这些目录将与模式匹配201[5-9]*
要同时处理 2019 年之后(直到 2099 年)的名称,请使用201[5-9]* 20[2-9]*.

列出它们:

shopt -s nullglob # to allow non-matching globs to expand to nothing
printf '%s\n' somedir/201[5-9]*/ somedir/20[2-9]*/

wheresomedir是保存子目录的目录。

要对其中每一个做某事:

shopt -s nullglob
for dir in somedir/201[5-9]*/ somedir/20[2-9]*/; do
   aws s3 cp "$dir" ...
done

注意:我从未使用过 S3,所以我不知道用于上传文件目录的正确命令。

答案3

我不确定您是否可以直接执行此操作,因此您需要获取目录列表,然后过滤输出。这样的命令可以帮助:

ls|awk -v snumber=201412 '$1>snumber {print}'

答案4

我刚刚列出了您根据您的要求替换 ls 命令

ls -ltr | awk '$1 ~ /^d/{print $0}'|sed -n '/[0-9]\{6\}/p'| awk '$NF >= "201412" {print "ls -ltr "$NF}'| sh

相关内容