копіювати рекурсивно, крім прихованого каталогу


13

Як скопіювати рекурсивно, як cp -rf *, але виключаючи приховані каталоги (каталоги, що починаються з.) Та їх вміст?

Відповіді:


6

Ви можете просто скопіювати все, за допомогою чого

cp -rf 

а потім видаліть приховані каталоги в пункті призначення за допомогою

find -type d -name '.*' -and -not -name '.' -print0 | xargs -0 rm -rf

Крім того, якщо у вас є розширений дьоготь (наприклад, GNU tar), ви можете спробувати використовувати tar для виключення деяких шаблонів. Але я боюся, що неможливо виключити лише приховані каталоги, але й включити приховані файли.

Наприклад щось подібне:

tar --exclude=PATTERN -f - -c * | tar -C destination -f - -x

Btw, GNU tar має зоопарк виключає варіанти стилів. Моя улюблена

--exclude-vcs

30

Хорошими варіантами копіювання дерева каталогів, крім деяких файлів, є:

  • rsync : це в основному cp плюс тонна можливостей виключення.

    rsync -a --exclude='.*' /source/ /destination
    
  • pax : він має деякі можливості виключення, і він знаходиться в POSIX, тому він повинен бути доступний скрізь (за винятком того, що деякі дистрибутиви Linux з певних причин не включають його у встановлення за замовчуванням).

    cd /source && mkdir -p /destination && \
    pax -rw -pp -s '!.*/\..*!!'  . /destination
    

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.