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

Я работаю над системой, в которой я бы хотел, чтобы первая буква каждого имени файла была случайной - не обязательно уникальной, просто случайной. Я хотел бы иметь возможность запускать это из задания cron.

Например, я мог бы указать его на список файлов, таких как

song.mp3    song1.mp3    song2.mp3
song3.mp3   song4.mp3    song5.mp3

И иметь он меняет имена файлов на что-то вроде этого:

a song.mp3    g song1.mp3    k song2.mp3
r song3.mp3   l song4.mp3    e song5.mp3

Есть ли способ сделать это?

1
задан 8 December 2013 в 21:46

2 ответа

Вы можете использовать переменную env $ RANDOM:

#!/bin/bash
for F in *.mp3 ; do
    mv $F $RANDOM.$F
done

Что будет перемещать файлы:

songa.mp3
song7.mp3

на

1875.songa.mp3
32654.song7.mp3

например .

3
ответ дан 24 May 2018 в 14:21
  • 1
    Хороший сценарий - могу ли я упомянуть, что это нужно делать из одного и того же каталога в исполняемом текстовом файле - если, конечно, это не делается как однострочный терминал ... – Wilf 8 December 2013 в 23:32
  • 2
    Нет необходимости использовать ls, вы могли бы просто for F in *.mp3; do mv -- "$F" "$RANDOM.$F" ; done (также полезно процитировать ваши переменные, чтобы он не разбивал имена файлов, содержащих пробелы, а -- после mv гарантирует, что он не будет разбиваться на имена файлов, начиная с -). – evilsoup 8 December 2013 в 23:46
  • 3
    Пока это работает, все должно быть хорошо - аргументы по сценарию для StackOverflow @evilsoup. Во всяком случае, я обновлю свою однострочную копию :-) – Wilf 8 December 2013 в 23:51
  • 4
    Ха-ха! По крайней мере, никто не сказал ОП, что он действительно не хочет давать им такие имена. – Joseph Santaniello 9 December 2013 в 00:01
  • 5
    @wilf Надеюсь, что это не показалось спорным, это не предназначалось. Я действительно думаю, что важно распространять хорошие методы написания сценариев, такие как цитирующие переменные. – evilsoup 9 December 2013 в 00:02

Вот однострочные версии скрипта @ Joseph, чтобы вы могли вставить его в терминал:

Сначала перейдите в нужный каталог:

cd /PATH/TO/DIRECTORY/

, а затем вы можете запустить команду непосредственно с терминала:

for F in $(ls *.mp3); do mv "$F" "$RANDOM.$F" ;  done;

, а более короткая версия будет:

for F in *.mp3 ; do mv "$F" "$RANDOM.$F" ; done

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

1
ответ дан 24 May 2018 в 14:21

Другие вопросы по тегам:

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