Как исключить определенные каталоги из копирования в Linux
Некоторое время назад мы обсуждали, как исключить файлы определенного размера из копирования с помощью rsync в Unix-подобных системах. Этот метод помог нам исключить файлы большого размера или менее важные файлы, чтобы завершить процесс копирования как можно скорее. Итак, оставшиеся файлы мы сможем скопировать позже, когда у нас будет свободное время. Сегодня в этом кратком руководстве мы увидим, как исключить определенные каталоги из копирования с помощью команд Rsync и cp в Linux.
Исключить определенные каталоги из копирования в Linux
Способов выполнения этой задачи может быть много. Мне известны следующие два метода.
Метод 1 – использование команды rsync
Как вы, возможно, уже знаете, Rsync — это быстрый и универсальный инструмент для копирования файлов и папок локально, на другой хост или с него через любую удаленную оболочку, а также на удаленный демон rsync или с него. Rsync имеет много полезных опций. Одной из полезных опций является --exclude. Используя опцию exclude, мы можем исключить определенные файлы/каталоги из копирования. Давайте посмотрим, как это сделать на примере.
Допустим, у вас есть папка ostechnix. Внутри каталога ostechnix есть три подкаталога, а именно: dir1, dir2 и dir3.
$ ls ostechnix/
dir1 dir2 dir3
Вы хотите скопировать dir1 и dir3 в другое место, но не dir2. Как? Здесь на помощь приходит rsync.
Чтобы исключить конкретный каталог из копирования с помощью команды rsync, просто запустите:
rsync -av --progress ostechnix/ backup/ --exclude dir2
Пример вывода будет:
sending incremental file list
./
dir1/
dir1/file1.pdf
6,152,611 100% 58.36MB/s 0:00:00 (xfr#1, to-chk=7/11)
dir1/file2
2,597,261 100% 14.83MB/s 0:00:00 (xfr#2, to-chk=6/11)
dir1/file3.doc
88,143 100% 470.37kB/s 0:00:00 (xfr#3, to-chk=5/11)
dir1/file4.txt
66,374 100% 330.71kB/s 0:00:00 (xfr#4, to-chk=4/11)
dir3/
dir3/file1.pdf
6,152,611 100% 18.39MB/s 0:00:00 (xfr#5, to-chk=3/11)
dir3/file2
2,597,261 100% 6.68MB/s 0:00:00 (xfr#6, to-chk=2/11)
dir3/file3.doc
88,143 100% 224.16kB/s 0:00:00 (xfr#7, to-chk=1/11)
dir3/file4.txt
66,374 100% 164.10kB/s 0:00:00 (xfr#8, to-chk=0/11)
sent 17,813,759 bytes received 187 bytes 11,875,964.00 bytes/sec
total size is 17,808,778 speedup is 1.00
Приведенная выше команда скопирует все содержимое папки ostechnix в папку backup и исключит каталог dir2 из копирования.
Альтернативно вы можете использовать ту же команду, что и ниже.
rsync -av --progress --exclude="folder_to_exclude" source_dirctory dest_directory
Пример:
rsync -av --progress --exclude="dir2" ostechnix/ backup/
На самом деле хорошей идеей будет пропустить или исключить некоторые большие или менее важные каталоги из копирования при резервном копировании вашей системы с помощью rsync, чтобы сэкономить ваше время.
Для получения более подробной информации посетите справочные страницы.
man rsync
Также читайте:
- Как быстро передавать большие файлы по сети в Linux и Unix
- Как узнать размер каталога в Linux из командной строки
Способ 2. Использование команды cp
Мы также можем использовать команду cp для копирования папок из одного места в другое, исключая определенные каталоги.
Перейдите в исходный каталог, то есть в нашем случае ostechnix.
cd ostechnix/
И выполните следующую команду:
cp -r `ls -A | grep -v "dir2"` /home/sk/backup/
Приведенная выше команда скопирует все содержимое текущей папки ostechnix, кроме подкаталога dir2, и сохранит его в /home/sk/backup/. каталог.
Еще проще мы можем сделать это следующим образом.
cp -r !(dir2) /home/sk/backup/
Для получения более подробной информации посетите справочные страницы.
man cp