Bash-скрипт для произвольного расширения имени файла

Как показывает ваш вывод ifconfig :

lo        Link encap:Local Loopback  
          LOOPBACK  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

... похоже, вам не хватает IP-адресов, принадлежащих lo . lo обычно должен иметь два IP-адреса: 127.0.0.1/8 и :: 1/128. Сценарии запуска системы обычно гарантируют, что это так, и ваша система будет считаться неисправной, если она этого не сделает.

Вы можете временно исправить это с помощью следующих команд:

ip link set lo up
ip addr add 127.0.0.1/8 dev lo
ip addr add ::1/128 dev lo

, но это не сохранит его для следующего раза. В следующий раз вы захотите исправить то, что не так. Я не знаю, как это сделать с вашим дистрибутивом, но если бы это был дистрибутив, подобный Debian, вы могли бы убедиться, что это присутствует в / etc / network / interfaces :

auto lo
iface lo inet loopback
2
21.06.2019, 15:53
3 ответа

Вы можете использовать mktemp :

$ mktemp foobarXXXXXX
foobarAU7TyS
$ mktemp foobarXXXXXX
foobardDqS61
$ mktemp foobarXXXXXX
foobarioCZw2

Возможно, в вашем примере это будет примерно так:

mv "$fname" "$(mktemp "${fname%.zip}"XXXXXX.zip)"

Но вам следует провести некоторое тестирование. Странные вещи происходят с zip-файлами, которые заканчиваются на 'X' ...;) (требуется суффикс / разделитель, отличный от X, который я для удобства оставил в этом примере).

Хорошая особенность mktemp заключается в том, что он гарантирует, независимо от того, насколько маловероятна вероятность, что имя файла еще не существует. Конечно, в приведенном выше примере бесполезно, что в первую очередь не проверяется наличие ошибок ...

Или вы используете встроенный механизм - backup mv .

(Зависит от того, почему вы это делаете в первую очередь.)

2
27.01.2020, 22:10

Это будет работать:

   for fname in *.zip
    do
        CODE="$(tr -dc '[:alnum:]' </dev/urandom | head -c 6)"
        CODESTRING="_cod_${CODE}"
        YOUR mv CODE
    done
0
27.01.2020, 22:10

Мы делаем все возможное, чтобы избежать преобразования в существующий файл, а также для обеспечения отказоустойчивости создание нового имени файла, которого раньше действительно не существовало, и возможность владеть им самим.

orig_umask=`umask`
umask 077; # take away perms from others + group
orig_state=$(set +o | awk '$3 == "noclobber"')
set -C; # cannot overwrite now
for fname in ./*.zip
do
   while :
   do
      CODE=$(head /dev/urandom | tr -cd 'a-zA-Z0-9_' | dd bs=1 count=6 2>/dev/null)
      CODESTRING="code_${CODE}"
      new_name=${fname%".zip"}_${CODESTRING}.zip
      { > $new_name; } &>/dev/null && break
   done
   mv -f "$fname" "$new_name"
done
# recover state
eval "$orig_state"
umask "$orig_umask"
0
27.01.2020, 22:10

Теги

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