Вот надежный способ получить первый или случайный файл в каталоге, обработки края случай не имея каких-либо файлов:
#!/bin/bash
# Let globs expand to 0 elements instead of themselves if no matches
shopt -s nullglob
# Add all the files in the current dir to an array
files=(*)
# Check if the array has any elements
if [[ ${#files[@]} -gt 0 ]]
then
first_file=${files[0]}
random_file=${files[RANDOM%${#files[@]}]}
echo "The first file is ${first_file}"
echo "A random file is ${random_file}"
else
echo "There are no files in the current directory."
fi
Если вы просто хотите что-то короткое и Hacky для интерактивного тестирования, вы может создать массив и ссылаться на него UnIndexed, чтобы получить первый элемент с минимальным типизации:
$ testfile=(*.avi)
$ ffmpeg -i "$testfile" test.mp3
Вы также можете связать Tab для завершения ЗШ стиль:
$ bind 'TAB:menu-complete'
сейчас, для остальной части этой сессии, при нажатии Tab вы получите полное имя файла, а не только префикса (нажмите Tab снова перебрать матчей). Это позволит вам удобно выбрать файл с одним нажатием клавиши.
Вы хотите, скажем, случайный файл, чтобы каждый раз получать разные результаты? Или это нормально всегда просто выбрать первый? Вы можете просто захватить '*' в списке и выбрать один из них, используя '1' или' $ RANDOM'. –
@ AndrewJanke либо в порядке: случайный или тот же. Я идеально надеюсь на что-то лишь несколько символов, чтобы его можно было легко перепечатать при прототипировании разных команд. Я предполагаю, что это можно было бы решить, используя 'mv', чтобы переименовать любой файл в один символ, но я предпочел бы использовать подход без переименования, что бесполезно, потому что это нужно делать вручную. Это плохо, если имена файлов имеют смысл (и пользователь не обращает внимания на 'mv'). – Aprel
Будет что-то вроде 'find. -type f -print -quit' работает для вашего дела? – livibetter