이름 구조가 모두 동일한 수백 개의 폴더가 있습니다. ##*, 00 내의 모든 폴더를 백업하려면 rsync를 사용해야 합니다.한 드라이브의 범위는 15_이고 다른 드라이브의 범위는 16_~99_입니다. rsync에 전달하기 위해 각 목록을 필터링하는 방법은 무엇입니까?
drwxrwxrwx+ 10 user user 4096 Feb 16 2017 07_MrSmith
drwxrwxrwx+ 3 user user 4096 Mar 24 12:55 10_Other_File
drwxrwxrwx+ 4 user user 4096 Aug 23 14:33 15_New_Interesting_folder
drwxrwxrwx+ 9 user user 4096 Aug 31 17:23 16_SimpleFolderNaming
drwxrwxrwx+ 3 user user 4096 May 8 12:53 17_VeryCurious
drwxrwxrwx+ 6 user user 4096 Mar 28 12:38 17_MantinanVinil
drwxrwxrwx+ 3 user user 4096 Mar 28 11:47 17_AnotherFolderWith_Subfolders
하위 집합을 숫자와 비교할 수 있는 "find", "xargs" 또는 "rsync" 명령에 대한 인수를 찾으려고 했지만 해결책을 찾을 수 없습니다.
내가 할 때 :
find -maxdepth 1 -regextype posix-extended -regex '..[0-1][0-5]_*'
00-15 범위의 폴더를 필터링하면 아무것도 반환되지 않습니다.
답변1
그리고 zsh
:
rsync ... <0-15>_*(/) somewhere
rsync ... <16->_*(/) somewhere-else
그리고 ksh
또는 bash -O extglob
또는 zsh -o kshglob
:
rsync ... @(0[0-9]|1[0-5])_* somewhere
rsync ... @(1[6-9]|[2-9][0-9])_* somewhere-else
또는 별도의 glob에서 이 작업을 수행할 수 있습니다(두 glob이 어떤 파일과도 일치하지 않으면 오류 메시지가 표시되고 말 그대로 ... rsync
라는 이름의 파일이 동기화될 수도 있음 ).0[0-9]_*
1[0-5]_*
rsync ... 0[0-9]_* 1[0-5]_* somewhere
rsync ... 1[6-9]_* [2-9][0-9]_* somewhere-else
( glob 한정자는 디렉터리 유형의 파일만 선택하며 bash
지원 ksh
되지 않습니다 .)(/)
POSIX적으로:
find . ! -name . -prune \( -name '0[0-9]_*' -o -name '1[0-5]_*' \) \
-type d -exec sh -c 'exec rsync ... "$@" somewhere' sh {} +
find . ! -name . -prune \( -name '1[6-9]_*' -o -name '[2-9][0-9]_*' \) \
-type d -exec sh -c 'exec rsync ... "$@" somewhere-else' sh {} +