Что делать, если я не хочу отображать первую директорию в команде find?

Вопрос или проблема

Я не хочу отображать первый каталог команды 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

Объяснение:

  1. Основной вызов find:

    • find . ! -name . -prune -type d – это означает, что мы ищем все подкаталоги, исключая саму текущую директорию ..
  2. Выполнение скрипта в 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. Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...