printf "%s\n" "${0##*/}"
${0##*/}
берет путь $0
и удаляет все имена каталогов, оставляя только имя файла. Команда printf добавляет новую строку в конец, а затем это имя файла передается в ...
| sha1sum | cut -d" " -f1
Это вычисляет хэш SHA-1 имени файла и затем использует cut
для извлечения только хеша из вывода sha1sum.
${0%/*}
Это противоположно ${0##*/}
- этот получает каталоги из $0
и выбрасывает имя файла.
Так эффективно, что в итоге получается:
mv "$DIR/$FILENAME" "$DIR/$HASH_OF_FILENAME"
На английском языке он переименовывает каждый найденный файл в хэш SHA-1 исходного имени файла.
Что бы это ни стоило, его можно немного упростить и сделать более читабельным. Я мог бы написать команду mv как:
mv "$0" "$(dirname "$0")/$(basename "$0" | sha1sum | awk "{print \$1}")