Как получить количество файлов в каталоге (рекурсивно), но исключить каталоги с определенным именем

Нет, вам не нужно запускать sync перед umount . umount завершит все ожидающие записи перед фактическим отключением файловой системы. Он также откажется от размонтирования, если какой-то процесс все еще использует файловую систему, например как текущий рабочий каталог.

Правка : Размонтирование в основном выполняется в fs / namespace.c . Вы не найдете там явного вызова sync , но вы увидите комментарии вдоль строки «отметьте эту точку монтирования для размонтирования, откажитесь от дальнейших операций с ней и, если все операции выполнены, размонтируйте» ". Вы также можете увидеть явные проверки использования.

Вы можете легко проверить себя, что umount действительно завершает все отложенные операции: подключите медленный USB-накопитель, скопируйте на него большой файл и напрямую вызовите umount после cp . Пройдет несколько секунд, прежде чем вы увидите новое приглашение, и если вы запустите dstat и т. Д. В другом окне, вы увидите операции записи, которые все еще продолжаются. Это точно такое же поведение, как если бы вы набрали sync .

1
13.04.2017, 15:36
1 ответ

Если вы не хотите спускаться ни в один из каталогов с именем @eaDir , тогда вам не следует использовать ! перед -name :

 mkdir -p a/@eaDir
 mkdir -p b/c/@eaDir
 mkdir -p d/e/f
 touch a/@eaDir/xxx
 touch b/yyy
 touch b/c/@eaDir/xxx
 touch d/e/f/yyy
 find . -name '@eaDir' -prune -o -print

даст вам:

.
./b
./b/yyy
./b/c
./a
./d
./d/e
./d/e/f
./d/e/f/yyy

и

find .//. -name '@eaDir' -prune -o -print | grep -c // 

даст вам: 9

Если имя совпадает с -name '@eaDir ', тогда остальная часть дерева внизу пропускается (' -prune '), в противном случае печатается имя ( -o -print )

2
27.01.2020, 23:35

Теги

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