Intereting Posts
Перенаправить вывод терминала в файл изображения Является ли «Арифметическое расширение» ожидаемым действием на vars внутри `[[` tests? Как изменить стандартный файловый менеджер рабочего стола Cinnamon? Как использовать yaourt в arch linux под proxy? Черные списки для определенных пользователей граница на нижней части терминальных эмуляторов даже в виде моноклава Найдите каждую строку, соответствующую шаблону, но напечатайте только строку над ней Поиск шаблона с условиями Почему команда 'at' не печатает на стандартный вывод? Какая разница в каждой сессии терминала для Konsole? Помните макет окна на нескольких мониторах на монетном дворе Mint Cinnamon Как управлять несколькими именами файлов с помощью find? Медленное разрешение DNS от curl / lynx и т. Д. Постоянная история Баша между отдельными процессами Лазанья не импортирует Python3 в монетный двор

Возьмите всю структуру файла, но эти каталоги

Я хочу скопировать всю структуру файла (с тысячами файлов и сотнями каталогов), это иерархия каталогов, и есть каталог node_modules, который я хочу исключить из процесса копирования.

Есть ли команда Unix для копирования из каталога и всех его файлов и подкаталогов рекурсивно с возможностью сказать, не включают в себя каталоги с именем <name> ?

Что-то вроде :

 cp root/ rootCopy/ --except node_modules 

?

Если нет, есть ли простой способ сделать это из командной строки без написания баха или чего-то еще?

Вы можете попробовать с помощью команды rsync или tar .

Смотрите эту статью.

Из rsync страницы rsync

  --exclude=PATTERN exclude files matching PATTERN --exclude-from=FILE read exclude patterns from FILE 

 rsync -avz --exclude 'dir*' source/ destination/ 

Жуткий метод, но он работает для меня:

 (find source|egrep -v "node_modules|^source/exact/node_plugin" && echo tmptarget)|xargs cp --parents mv tmptarget/source target 

Объяснение при необходимости. cp работает следующим образом:

 cp source1 source2 ... sourceN target 
  • Так что find печатает всю вашу структуру.
  • Используйте egrep для исключения всех нежелательных ветвей. Убедитесь, что вы правильно сформировали свой узор. Используйте ^ и полный путь, если вы хотите исключить точную ветку или просто node_modules если хотите исключить все из них.
  • распечатать папку назначения с помощью команды echo .
  • Пусть xargs поместит все эти строки в команду cp для вас
  • --parents необходимо для создания папок родителей, потому что мы не можем использовать параметр -r здесь, так как это все испортит в целевой папке.
  • И, наконец, mv вся новая структура для реальной цели