Команда для нахождения файла/длин пути, которые являются слишком длинными для записи к DVD?

У меня есть сценарий, который каждый день работает и создает резервную копию файлов, которые изменились начиная с предыдущего резервного копирования:

#!bin/bash
ext=$(date +"%Y%m%d")_ChangeS
mkdir -p "$1/$ext" && \
  ionice -c3 rsync -ah --numeric-ids --inplace --backup \
                   --backup-dir="$1/$ext" \
                   --include="/etc" / "$1" && \
  rmdir --ignore-fail-on-non-empty "$1/$ext"

Вы передаете в пути, где резервные копии были бы созданы, и тот каталог будет иметь список подобным этому (после того, как несколько выполнений):

20120106_ChangeS  etc
$ls 20120106_ChangeS/etc/
cron.d

Вы могли изменить его немного, чтобы записывать изменения чаще или использовать inotify для инициирования измененной версии сценария, когда изменения происходят на /etc.

7
14.01.2013, 03:37
2 ответа

С GNU находят (на Linux или Cygwin), можно искать файлы, относительный путь которых является больше чем 255 символами долго:

find -regextype posix-extended -regex '.{257,}'

(257 счетов на начальную букву ./.)

18
27.01.2020, 20:13
  • 1
    Полезный! Кажется, что существует также ограничение (в Windows, по крайней мере) это при записывании DVD никакое имя файла (или имя папки?) могут быть дольше, чем 106 символов. Маленькая модификация к Вашему regex нашла бы те случаи также. Спасибо –  Highly Irregular 14.01.2013, 05:06
  • 2
    На Mac можно использовать встроенный find -E . -regex ".{255,}" перечислять относительные пути> = 253 символа. 255 макс. количество повторения, поддерживаемое механизмом RegEx встроенной находки. –  DKroot 28.12.2016, 22:50

Я нашел 2 способа сделать это:

find . | perl -pe 'print (length($_)-1)." ";' | sort -rn | less
find . | awk '{print length,$0}' | sort -rn | less

Моя первая попытка (находят. | жемчуг-pe 'печатают длину'; | вид-rn | меньше) при команде с помощью жемчуга сообщил о счетчике символов, это слишком высоко одним, поскольку я думаю, что это включает символ новой строки в свое количество? Это может, вероятно, быть сделано более чисто, чем мой выше метода, но я получил результат, в котором я нуждался.

7
27.01.2020, 20:13
  • 1
    Действительно Ваша первая попытка жемчуга включала новую строку. Вы могли записать perl -l -pe 'print length': -l заставляет жемчуг автоматически снять изоляцию с символа новой строки. –  Gilles 'SO- stop being evil' 14.01.2013, 03:35

Теги

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