我有一个文件夹,其子文件夹命名约定类似于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