Нет, вам не нужно запускать sync
перед umount
. umount
завершит все ожидающие записи перед фактическим отключением файловой системы. Он также откажется от размонтирования, если какой-то процесс все еще использует файловую систему, например как текущий рабочий каталог.
Правка : Размонтирование в основном выполняется в fs / namespace.c
. Вы не найдете там явного вызова sync
, но вы увидите комментарии вдоль строки «отметьте эту точку монтирования для размонтирования, откажитесь от дальнейших операций с ней и, если все операции выполнены, размонтируйте» ". Вы также можете увидеть явные проверки использования.
Вы можете легко проверить себя, что umount
действительно завершает все отложенные операции: подключите медленный USB-накопитель, скопируйте на него большой файл и напрямую вызовите umount
после cp
. Пройдет несколько секунд, прежде чем вы увидите новое приглашение, и если вы запустите dstat
и т. Д. В другом окне, вы увидите операции записи, которые все еще продолжаются. Это точно такое же поведение, как если бы вы набрали sync
.
Если вы не хотите спускаться ни в один из каталогов с именем @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
)