yyyymm
예를 들어 200801, 200803 등과 유사한 하위 폴더 명명 규칙을 가진 폴더가 있습니다 . S3에 업로드하기 위해 명령줄을 통해 201412 이후의 폴더를 나열하고 싶습니다. 그것을 할 수 있는 방법이 있나요?
답변1
디렉토리 내용을 나열하고, awk로 파이프하고, 원하는 날짜보다 크거나 같은 값만 인쇄하고, xargs s3으로 파이프합니다.
ls | awk '$1 >= 201412 {print $1}' | xargs -n1 YOUR_S3_COPY_COMMAND -options
디렉터리와 파일이 많은 경우 -P 동시 프로세스 수를 사용하여 xargs를 병렬화할 수 있습니다.
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]*/
somedir
하위 디렉터리가 저장되는 디렉터리는 어디에 있습니까?
각각에 대해 작업을 수행하려면 다음을 수행하십시오.
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