ファイル名番号が数値より大きいファイルを再同期するには?

ファイル名番号が数値より大きいファイルを再同期するには?

名前構造がすべて同じ数百のフォルダがあります。 ##*、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修飾子はディレクトリタイプのファイルのみを選択し、サポートされていませbashksh。)(/)

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

おすすめ記事