Как избежать определенного каталога или файлов при копировании из основного каталога?

Предположим, у меня есть следующая структура каталогов:

main folder 
   sub directory 
   sub2 directory

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

Я поискал в Интернете и нашел способ сделать это, но они использовали что-то вроде:

rsync -av --progress --exclude='logdir'

Я не собираюсь переходить к размеру и копированию. Я использую такую ​​команду:

cp -i -r source destination

Я делаю это из-за защиты от перезаписи.

Итак, как исключить определенный каталог или файлы при копировании из основного каталога?

2
задан 4 April 2021 в 20:23

1 ответ

Один из способов - запустить это из основная папка :

find -maxdepth 1 -type d ! -name "dir" ! -path . -exec cp -i -r {} /path/to/destination/ \;
  • Замените каталог именем каталога, который нужно исключить.
  • Замените / путь / на / назначение / на путь к каталогу назначения.

Другой способ - добавить такую ​​пользовательскую функцию:

mycp () {
        for f in "$1"*
        do
        grep -qwv  "$3" <(echo "$f") && \
        cp -i -r "$f" "$2"
        done
}

в ваш ~ / .bashrc затем исходный файл или просто закройте и снова откройте свой терминал.

Вы можете использовать его так:

mycp "/path/to/source/" "/path/to/destination/" "dir"
  • Замените / path / на / source / на путь к исходному каталогу. Он должен заканчиваться завершающим / .
  • Замените / путь / на / назначение / на путь к каталогу назначения. Он должен заканчиваться завершающим / .
  • Замените каталог именем каталога, который нужно исключить.

Сопоставление с шаблоном Bash с расширенным способом подстановки (будьте осторожны):

Сопоставление с образцом Bash с расширенным подстановкой - это вариант.

Я добавил это только потому, что @ bac0n упомянул об этом в комментариях. Этот вид сопоставления шаблонов bash требует включения расширенного глобального поиска, который не включен по умолчанию ... простое глобальное отображение включено по умолчанию, но оно не работает с этим ... Я не люблю советовать новым участникам / простым пользователям включать и использовать расширенные подстановки и особенно в файловых операциях.

Расширенное глобирование никоим образом по своей природе не более опасно, чем простое глобирование. Однако у пользователей могут быть сценарии и код bash, которые они, возможно, изначально скопировали и вставили из Интернета, и в них есть некоторые расширенные шаблоны подстановки ... они могут вести себя по-другому, когда пользователь включает расширенное подстановку, и это может быть деструктивным, если эти сценарии / коды имеют дело с файловыми операциями. Опытный пользователь должен заметить разницу, а новичок - нет.

Чтобы использовать его в любом случае, вам нужно сначала включить расширенную функцию подстановки bash, например:

shopt -s extglob

затем использовать cp вот так:

cp -i -r source/!(name of directory to execlude) destination/

Для получения дополнительной информации см. Расширенное подстановочное отображение Bash

1
ответ дан 23 April 2021 в 23:27

Другие вопросы по тегам:

Похожие вопросы: