如何rsync文件名数字大于数字的文件?

如何rsync文件名数字大于数字的文件?

我有几百个文件夹,所有文件夹都具有相同的名称结构,##* ,我需要用rsync备份00以内的所有文件夹一个驱动器的范围为 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

kshbash -O extglobzsh -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

(请注意,bash并且ksh不支持(/)glob 限定符仅选择目录类型的文件)。

POSIXly:

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 {} +

相关内容