Моя файловая система выглядит так:

Источник/

folder1/
  subfolder/
    contents
  other_subfolders
  file1
  file2
folder2/
  subfolder/
    contents
  other_subfolders
  file1
  file2
folder3/
  subfolder/
    contents
  other_subfolders
  file1
  file2
file1
file2

Я хочу скопировать только это:

folder1/
  subfolder/
    contents
folder2/
  subfolder/
    contents
folder3/
  subfolder/
    contents

То есть я хочу только сохранить

  • структура папок
  • копировать подпапки с их содержимым
  • игнорировать любые файлы вне подпапок или любые другие папки вне подпапок

В настоящее время я пытаюсь:

$cd destination
$rsync -atvr --include="*/subfolder/" --exclude="*" source/ .

Вставив --exclude="*", я надеюсь исключить все, кроме того, что я включил, а именно */subfolder/, то есть папки с именем subfolder, находящейся внутри любой папки самого высокого уровня в исходном коде...

Однако никакие файлы никогда не копируются. Почему? Что мне не хватает?

Я тоже пробовал

$cd destination
$rsync -atvr --include="*/subfolder/" --exclude="*/*" source/ .

Но это сделало это:

folder1/
  subfolder/
folder2/
  subfolder/
folder3/
  subfolder/
file1
file2

Сохранял файлы в исходниках (вне папок), создавал нужные подпапки, но ничего не копировал внутрь них.

Редактировать: по просьбе Шивы, после добавления rsync -av --include='/' --include='/subfolder**' --exclude='*' source/ .

Я получил:

Для доступа к системе:

1) Если вы не используете ssh-ключи, введите свой пароль TACC при запросе пароля 2) При запросе токена TACC введите свой 6-значный код, а затем .

Password:
TACC Token Code:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "C.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "C.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "C.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "C.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "C.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "C.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "C.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "C.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
receiving incremental file list
./

sent 59 bytes  received 104 bytes  10.52 bytes/sec
total size is 3,242  speedup is 19.89

Но я обещаю, что все эти предупреждения не имеют ничего общего с проблемой и появляются каждый раз, когда я пытаюсь получить доступ к серверу любым способом (ssh, scp, rsync, ...).

0
user16320 22 Апр 2020 в 19:56

2 ответа

От мужчины:

если шаблон содержит / (не считая завершающего /), то он сопоставляется с полным путем, включая все ведущие каталоги.

Попробуйте как,

 rsync -av --include='/' --include='/subfolder**' --exclude='*' source/ destination/
0
Siva 22 Апр 2020 в 08:01
Это все равно ничего не копирует...
 – 
user16320
22 Апр 2020 в 14:19
Не могли бы вы поделиться выводом команды...
 – 
Siva
22 Апр 2020 в 15:13
(Множество предупреждений, относящихся к конкретному серверу, которые отображаются при выполнении любой команды), а затем: «отправлено 59 байт, получено 104 байта, 10,52 байта/сек, общий размер равен 3242, ускорение равно 19,89».
 – 
user16320
22 Апр 2020 в 15:38
Поделитесь вопросом плиз...
 – 
Siva
22 Апр 2020 в 18:03
Я добавил правку: я вставил предупреждения с выводом rsync в вопрос.
 – 
user16320
22 Апр 2020 в 19:57

Вы можете избежать потенциальной сложности --include и --exclude, используя относительные пути для указания исходного набора файлов, который вы хотите скопировать.

Сценарий

Мы создаем ваш примерный каталог и файловую структуру в самом верхнем каталоге src. Мы будем копировать выделение в самый верхний каталог dst

mkdir -p src/folder{1,2,3}/{subfolder,other_subfolders} dst
touch src/folder{1,2,3}/subfolder/contents src/{folder{1,2,3}/,}file{1,2}
find src | LC_ALL=C sort

rsync --dry-run -avR src/./folder*/*/* dst/

Вывод (из rsync)

sending incremental file list
folder1/
folder1/subfolder/
folder1/subfolder/contents
folder2/
folder2/subfolder/
folder2/subfolder/contents
folder3/
folder3/subfolder/
folder3/subfolder/contents

/./ отмечает точку, в которой оставшаяся часть исходного пути должна использоваться в пункте назначения. Удалите --dry-run, чтобы он выполнял выбранные операции.

0
roaima 22 Апр 2020 в 11:37
Для этого я получаю следующую ошибку: bash: /bin/rsync: слишком длинный список аргументов
 – 
user16320
22 Апр 2020 в 14:19
У вас гораздо больше папок, чем вы предложили в своем вопросе
 – 
roaima
22 Апр 2020 в 14:35
У меня 21 папка
 – 
user16320
22 Апр 2020 в 14:58