Предположим, у меня есть следующая структура каталогов:
main folder
sub directory
sub2 directory
Я хочу избежать копирования определенного каталога или файлы при копировании из основной папки
.
Я поискал в Интернете и нашел способ сделать это, но они использовали что-то вроде:
rsync -av --progress --exclude='logdir'
Я не собираюсь переходить к размеру и копированию. Я использую такую команду:
cp -i -r source destination
Я делаю это из-за защиты от перезаписи.
Итак, как исключить определенный каталог или файлы при копировании из основного каталога?
Один из способов - запустить это из основная папка
:
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