Учитывая, что ваш exclude_file
содержит пути, а не имена, вам необходимо использовать -path
для сопоставления его записей. Чтобы исключить соответствующие подкаталоги каталогов, вам также необходимо -prune
их. Это должно сработать:
find . -type d \( $(printf -- "-path */%s -o " $(cat "$exclude_file")) -false \) -prune -o -print
Если вы хотите видеть только файлы, вы можете печатать только файлы:
find . -type d \( $(printf -- "-path */%s -o " $(cat "$exclude_file")) -false \) -prune -o -type f -print
bash
интерпретирует число с нулем в начале как восьмеричное. Проблема не в формате, проблема в переменной $ input_day
.
Вы можете удалить их с помощью различных методов (см., Например, awk-эквивалент функции LTRIM в C ).
Дополнительная литература:
Для удаления ведущих нулей перед передачей переменной в iptables
используется следующий синтаксис: $ ((10 # $ machinenumber))
, например, для вашего примера:
printf -v input_day '% 02d' "$ ((10 # $ input_day))"
Bash: удаление ведущих нулей из переменной
более уместно:
shopt -s extglob
printf -v input_day '% 02d' $ {input_day ## + (0)}
Кстати, в примере не проверяется, пуста ли переменная. Но проверить это должным образом было бы другим вопросом.