As long as I've got the 0700 permission nobody is getting to my file/directory without brute forcing the strong password
and you initially ask "is encryption any better than 0700 permissions?"
да, потому что я или кто-либо другой может просто взять ваш диск и смонтировать или подчинить его другой системе (обычно Linux), и при этом просто обойти все права доступа к файлам/папкам, которые были на вашем не -зашифрованный диск и получить доступ ко всем данным на незашифрованном -диске. Предполагается, что настроить второй компьютер и установить любой из дюжины бесплатных дистрибутивов Linux для выполнения задачи монтирования и доступа ко всему, что не -зашифровано либо на всем -уровне диска, либо на уровень файла.
Утилита find
поддерживает опцию-maxdepth
-maxdepth levels
Descend at most levels (a non-negative integer) levels of directories below the starting-points. -maxdepth 0 means only apply the tests and actions to the starting-points themselves.
Чтобы ограничить find
указанным каталогом, вы можете добавить опцию -maxdepth 1
.
Если вы пытаетесь получить список всех обычных файлов *.partial
на глубине 2 с выводом, аналогичным указанному в вашем вопросе, вы можете попробовать такую команду, как
find. -mindepth 2 -maxdepth 2 -type f -name '*.partial' -printf '%h\t./%f\n'
, который может дать результат, аналогичный
./b ./file2.partial
./b ./file3.partial
./a ./file1.partial
Если у вас GNU find
, вы можете сделать что-то вроде этого
for dir in *
do
files=$(find "$dir" -maxdepth 1 -type f -name '*.partial' -printf "%f\n" | xargs)
[[ -n "$files" ]] && printf "%s\t%s\n" "$dir" "$files"
done
Если у вас нет GNU find
, вы можете эмулировать -printf '%f\n'
за счет некоторой эффективности, например
for dir in *
do
files=$(cd "$dir" && find. -maxdepth 1 -type f -name '*.partial' -print | sed 's!^./!!' | xargs)
[[ -n "$files" ]] && printf "%s\t%s\n" "$dir" "$files"
done
Ни одно из решений не обрабатывает файлы с новой строкой или странными -печатными символами, но если вы перечисляете файлы в каталоге в одной строке, я ожидаю, что у вас не будет странных имен файлов. Если у вас есть оболочка, которая не понимает [[... ]]
, просто замените двойные скобки одинарными скобками [... ]
.
Чтобы просто вывести полное имя пути для каждого .partial
файла относительно текущего каталога:
printf '%s\n'./*/*.partial
Установка параметра оболочки nullglob
в bash
приведет к тому, что это не приведет к выводу самого шаблона, если совпадения нет (будет по-прежнему выводиться пустая строка ), а установка dotglob
будет дополнительно соответствовать скрытые имена.
Далее эти пути разбиваются на части пути к каталогу и имени файла:
for name in./*/*.partial; do
[ -f "$name" ] && printf '%s\t%s\n' "${name%/*}" "${name##*/}"
done
Будет напечатано имя подкаталога и .partial
имя файла для каждого .partial
имени, найденного в любом подкаталоге текущего каталога.
В bash
вы можете дополнительно установить параметр оболочки dotglob
, если вам также необходимо иметь возможность сопоставлять скрытые имена.
Две подстановки параметров могут быть заменены вызовами dirname
и basename
:
for name in./*/*.partial; do
[ -f "$name" ] && printf '%s\t%s\n' "$(dirname "$name")" "$(basename "$name")"
done
Вариант вышеприведенного для печати имени подкаталога только один раз (для этого требуетсяbash
-подобная оболочка для расширения параметра ${*%%*/}
, которое удаляет пути к каталогам и оставляет имена файлов для каждого позиционного параметра):
IFS=$'\t'
for dirname in./*/; do
set -- "$dirname"/*.partial;
[ -f "$1" ] && printf '%s\t%s\n' "$dirname" "${*##*/}"
done
Это перебирает каждый подкаталог и расширяет шаблон подстановки *.partial
в каждом из них. Если первым совпадением является обычный файл (или ссылка на него ), печатается имя подкаталога, за которым следуют имена, соответствующие шаблону, с удалением пути к каталогу.