Октет состоит из восьми битов; это позволяет избежать потенциальной двусмысленности термина «байт», который может (может )представлять размеры шрифта, отличные от восьми битов.
В мире POSIX права доступа к файлам представлены двенадцатью битами .
Из этого следует, что термин «октет» не может точно использоваться для прав доступа к файлам. Я подозреваю, что путаница возникает, по крайней мере в некоторых случаях, из-за того, что восьмеричные значения обычно используются для представления прав доступа к файлам, а термины «восьмеричный» и «октетный» очень похожи.
Вам нужно будет игнорировать резервную директорию, чтобы find
не вошел в нее. Уже есть ответ , показывающий, как это сделать.
Однако при таком способе резервного копирования файлов вы можете потерять данные. Если два или более файла в разных подкаталогах имеют одинаковые имена, они будут перезаписывать друг друга поверх -в месте назначения в резервном каталоге.
Было бы лучше использовать какое-нибудь реальное программное обеспечение для резервного копирования данных, такое как restic
. Если это невозможно, используйте решение, сохраняющее относительный путь к файлам, для которых выполняется резервное копирование.
Следующая команда использует rsync
для копирования (без перемещения )всех файлов, имена которых содержат подстроку 2019
в каталогbackup_2019
:
rsync --itemize-changes --archive --prune-empty-dirs \
--exclude='/backup_2019/***' --include='*/' --include='*2019*' --exclude='*' \
././backup_2019
Это позволит избежать поиска внутри ./backup_2019
файлов или каталогов для передачи, но в противном случае будет скопировано все, что содержит подстроку 2019
. Каталоги на цели, которые в конечном итоге пусты, удаляются. Все, что копируется, копируется в место под backup_2019
, которое совпадает с расположением файла в текущем каталоге :
Пример:
$ tree -F
.
|-- dir1/
| |-- file-1
| |-- file-2019-A
| `-- subdir/
| |-- file-2
| `-- file-2019-B
|-- dir2/
| |-- file-1
| |-- file-2019-A
| `-- subdir/
| |-- file-2
| `-- file-2019-B
`-- dir3/
|-- file-1
|-- file-2019-A
`-- subdir/
|-- file-2
`-- file-2019-B
$ rsync --itemize-changes --archive \
--prune-empty-dirs \
--exclude='/backup_2019/***' --include='*/' --include='*2019*' --exclude='*' \
././backup_2019
cd+++++++++./
cd+++++++++ dir1/
>f+++++++++ dir1/file-2019-A
cd+++++++++ dir1/subdir/
>f+++++++++ dir1/subdir/file-2019-B
cd+++++++++ dir2/
>f+++++++++ dir2/file-2019-A
cd+++++++++ dir2/subdir/
>f+++++++++ dir2/subdir/file-2019-B
cd+++++++++ dir3/
>f+++++++++ dir3/file-2019-A
cd+++++++++ dir3/subdir/
>f+++++++++ dir3/subdir/file-2019-B
$ tree -F
.
|-- backup_2019/
| |-- dir1/
| | |-- file-2019-A
| | `-- subdir/
| | `-- file-2019-B
| |-- dir2/
| | |-- file-2019-A
| | `-- subdir/
| | `-- file-2019-B
| `-- dir3/
| |-- file-2019-A
| `-- subdir/
| `-- file-2019-B
|-- dir1/
| |-- file-1
| |-- file-2019-A
| `-- subdir/
| |-- file-2
| `-- file-2019-B
|-- dir2/
| |-- file-1
| |-- file-2019-A
| `-- subdir/
| |-- file-2
| `-- file-2019-B
`-- dir3/
|-- file-1
|-- file-2019-A
`-- subdir/
|-- file-2
`-- file-2019-B
13 directories, 18 files
Вы можете добавить --remove-source-files
в список опций rsync
для выполнения «перемещения», а не «копирования» резервных копий файлов.
Вы должны игнорировать целевой каталог, который хотите исключить
find. -path './backup_2019' -prune -o -type f -name '*2019*' -exec mv {}./backup_2019 \;
Неявное И между операторами связывает более тесно, чем ИЛИ (-o
), поэтому оно переводится как(пропустить, если путь соответствует./backup_2019
)ИЛИ (mv
, если у нас есть файлы, соответствующие*2019*
).