Вопрос или проблема
Я не хочу отображать первые директории команды 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
, чтобы не отображать имя родительской директории (например, ./dir1
и ./dir2
), а вместо этого просто вывести имена файлов и поддиректорий, вам нужно изменить ваш код так, чтобы он выводил относительные пути для файлов и папок, начиная не с родительской директории, а с текущей.
Вы можете воспользоваться следующей командой:
find . ! -name . -prune -type f -exec sh -c '
for file do
echo "${file#./}"
done' sh {} + >> ../md5
В этом примере:
find . ! -name . -prune -type f
— командаfind
ищет файлы (-type f
), игнорируя текущую директорию (! -name .
).-exec sh -c '...' sh {} +
— это позволяет выполнить команды для каждого найденного файла.echo "${file#./}"
— используется параметрическое подстановка, чтобы убрать ведущие./
из имени файла, что и позволяет получить желаемый вывод, например,file1
иdir3/file2
.
Если вы также хотите обрабатывать поддиректории, модифицируйте find
следующим образом:
find . ! -name . -prune -exec sh -c '
for item do
echo "${item#./}"
done' sh {} + >> ../md5
Этот вариант добавит и директории, и файлы, игнорируя при этом ведущую часть пути.
Таким образом, вывод будет содержать только относительные пути к файлам и поддиректориям начиная с текущего уровня, без указания родительских директорий.