Вопрос или проблема
Я не хочу отображать первый каталог команды find
из приведенного ниже примера
find . ! -name . -prune -type d -exec sh -c '
Для dir do
echo "\n\n${dir#.*/}\n"
find "$dir" -exec md5sum {\} +
done' sh {} + >> ../md5
Пример вывода:
dir1
Md5sum значение ./dir1/file1
Dir2
Md5sum значение ./dir2/dir3/file2
Я не хочу отображать первый каталог, то есть ./dir1
и ./dir2
в пути, вместо этого я хочу, чтобы find
выводил ./file1
и ./dir3/file2
Есть ли какой-то способ сделать это
Спасибо заранее
Ответ или решение
Ваша задача заключается в том, чтобы исключить отображение первого уровня директорий в выводе команды find
, оставляя при этом внутренние пути к файлам и папкам. Вы можете достичь этого, используя find
вместе с sed
для обработки вывода.
Вот как вы можете это сделать:
find . ! -name . -prune -type d -exec sh -c '
for dir do
find "$dir" -type f -exec md5sum {} + | sed "s|^$dir/||"
find "$dir" -type d -exec sh -c "for subdir do echo \"./\${subdir#$dir/}\"; done" sh {} +
done' sh {} + >> ../md5
Объяснение:
-
Основной вызов
find
:find . ! -name . -prune -type d
– это означает, что мы ищем все подкаталоги, исключая саму текущую директорию.
.
-
Выполнение скрипта в
sh -c
:- Для каждого найденного каталога (
$dir
) мы используемfind
дважды:- Первый вызов
find "$dir" -type f -exec md5sum {} + | sed "s|^$dir/||"
– находит все файлы и вычисляет их контрольные суммы. С помощьюsed
мы убираем путь до первого уровня каталога, оставляя только относительный путь до файла. - Второй вызов
find "$dir" -type d -exec sh -c "for subdir do echo \"./\${subdir#$dir/}\"; done" sh {} +
– находит подкаталоги внутри текущего каталога и выводит их пути, делая то же самое, что и в предыдущем случае.
- Первый вызов
- Для каждого найденного каталога (
Результат:
В выводе теперь не будет отображаться самих первых уровней директорий, и вы получите строки вида:
./file1
./dir3/file2
Заключение:
С помощью этой команды вы можете добиться желаемого результата, избегая отображения первого уровня директорий при выводе find
. Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться.