Непосредственной ошибкой является то, что первый аргумент, переданный bash -c "...commands..."
, заканчивается $0
, а не $1
.Кроме того, поскольку вы использовали двойные кавычки вокруг "...commands..."
, оболочка , вызывающая , будет интерполировать все переменные в момент передачи скрипта в подоболочку.
Хотя это кажется действительно запутанным.Без знания того, что именно вы надеетесь достичь, это довольно умозрительно, но я бы подошел к этому примерно так:
time find BASE_DIR -maxdepth 1 -mindepth 1 -type d \
-execdir find . -type f -exec bash -c '
for f; do
inode=$(stat -c "%i" "$f")
md5=$(md5 <"$f" | cut -d " " -f1)
printf "Name: %s - Inode: 0x%X - MD5: %s\n" "$f" "$inode" "$md5"
done' _ {} \\+ \;
Если вы можете объяснить, как вы хотите, чтобы вывод был отсортирован, возможно, вставьте ключ сортировки вprintf
и отсортировать по нему в конце.
Обратите также внимание на то, как мы избегаем прописных букв в частных переменных.