Одна команда для переименования файла в первый N символов его хэша

В этом коде нет ничего (принципиально) неправильного, ваша проблема в том, что вы сбросили "IFS" где-то еще, вероятно, он пустой (поэтому вывод seq рассматривается как одиночный токен).

Давно я не видел $ [] , он устарел (и недокументирован). Используйте $ (()) .

Вместо seq используйте для (()) , а вместо добавления 1 используйте let var ++ , поэтому мы имеем:

for (( i1=1 ; i1<=5; i1++))
    do
        for ((k1=i1+1; k1<=5; k1++))
            do
                ky1="${team_two[i1]}_${team_two[k1]}"
                let pair_score[$ky1]++
            done
    done    

Поскольку вы вы используете недавний bash с ассоциативными массивами, можете также использовать и другие полезные функции: -)

0
18.02.2019, 22:39
3 ответа

Почему бы не использовать:

mv -- inputfile.png "$(shasum -a 256 -b inputfile.png | head -c8)"

Он переместит ваш файл на вывод $(shasum -a 256 -b inputfile.png | head -c8), т.е. первые 8 символов хеша.

4
28.01.2020, 02:13

Используйте подстановку команд для сохранения хеша в переменной оболочки:

file=inputfile.png
h=$(shasum -a 256 -b "$file" | head -c8)

Затем вы можете использовать его для переименования, печати на терминал, отправки на pbcopyи т.д.

mv -- "$file" "$h"
echo "$h" | pbcopy
echo "'$file' renamed to '$h'"

Если вы хотите сохранить расширение файла, используйте что-то вроде этого:

newname=$h.${file##*.}
mv -- "$file" "$newname"

(${var##*.}удаляет все до последней точки.)

3
28.01.2020, 02:13

Если вы хотите переименовать все файлы, используйте xargs. Это заклинание инструментов GNU, проверьте свои справочные страницы, чтобы увидеть, существуют ли соответствующие параметры.

printf "%s\0" * |
    xargs -0 -I{} sh -c 'echo mv "$1" "$(shasum -a 256 -b "$1"| head -c8)"' sh {} 

При этом нулевой байт используется для разделения имен файлов, что делает работу с именами файлов, содержащими пробелы, безопасной операцией.

Команда echoдолжна быть удалена для фактического перемещения файлов.

1
28.01.2020, 02:13

Теги

Похожие вопросы