использование команды find или другой команды для ограничения поиска расширения имени файла в пределах одного каталога

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 для выполнения задачи монтирования и доступа ко всему, что не -зашифровано либо на всем -уровне диска, либо на уровень файла.

0
03.01.2020, 23:42
3 ответа

Утилита 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
2
28.01.2020, 02:14

Если у вас 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

Ни одно из решений не обрабатывает файлы с новой строкой или странными -печатными символами, но если вы перечисляете файлы в каталоге в одной строке, я ожидаю, что у вас не будет странных имен файлов. Если у вас есть оболочка, которая не понимает [[... ]], просто замените двойные скобки одинарными скобками [... ].

1
28.01.2020, 02:14

Чтобы просто вывести полное имя пути для каждого .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в каждом из них. Если первым совпадением является обычный файл (или ссылка на него ), печатается имя подкаталога, за которым следуют имена, соответствующие шаблону, с удалением пути к каталогу.

3
28.01.2020, 02:14

Теги

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