Перемещение случайного файла с помощью команды mv

Простой и короткий вопрос; возможно ли mv перемещать случайный файл?

Я знаю, что mv может перемещать все файлы с определенным расширением с помощью mv *.extension, но поскольку я довольно новичок в Ubuntu / Linux в целом Я не уверен, может ли mv сделать это или нет.

1
задан 1 April 2016 в 01:21

1 ответ

Вот подход, основанный только на оболочке:

## Save all files in the array $files
files=(*)
## Get a random number between 0 (arrays start counting at 0) and the 
## the number of files -1 (the last file in the array)
rand=-1
until (( $rand < ${#files[@]} && $rand >= 0 )); do rand=$RANDOM; done
## Move the file, renaming as necessary
mv "${files[$rand]}" newfilename

Вы можете скопировать / вставить вышеуказанное прямо в ваш терминал.

В качестве альтернативы, в Perl :

perl -le 'rename $ARGV[int(rand($#ARGV))],newfilename' *

Функция rename просто переименовывает свой первый аргумент как второй: rename orifinal_file new_file. Функция rand печатает случайное дробное число между 0 и заданным аргументом. $#ARGV - количество аргументов, предоставляемых скрипту, здесь все файлы (и подкаталоги) в текущем каталоге. Поскольку rand возвращает дробные числа, мы передаем его через int(), чтобы получить целое число. Таким образом, int(rand($#ARGV)) выбирает один из индексов в массиве @ARGS случайным образом, и поэтому $ARGV[int(rand($#ARGV))] является одним из файлов.

1
ответ дан 23 May 2018 в 12:27

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

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