В зш:
files=( **/*.EXT(oe'{REPLY=$RANDOM}') )
first=(input3.EXT input5.EXT)
printf 'file %s\n' ${first[@]} ${files:|first} > list.txt
Первая строка назначает массив всех файлов, которые вы ищете (рекурсивно ), но упорядочивает их случайным образом.
Во второй строке указывается массив имен файлов, которые должны быть первыми в результирующем списке.
Третья строка выводит имена файлов в list.txt (с префиксом "file "
; два аргумента - это файлы first
, за которыми следует остальная часть files
--, но последний использует синтаксис удаления массива :|
для удаления записей из «файлов», которые существуют в массиве «сначала».
На входе этого образца:
$ tree.
.
├── input1.EXT
├── input2.EXT
├── input3.EXT
├── input4.EXT
├── input5.EXT
└── subdir
└── subdirfile1.EXT
Первый пробный запуск:
$ files=( **/*.EXT(oe'{REPLY=$RANDOM}') )
$ first=(input3.EXT input5.EXT)
$ printf 'file %s\n' ${first[@]} ${files:|first}
file input3.EXT
file input5.EXT
file subdir/subdirfile1.EXT
file input4.EXT
file input1.EXT
file input2.EXT
и последующий пробный запуск:
$ files=( **/*.EXT(oe'{REPLY=$RANDOM}') )
$ first=(input3.EXT input5.EXT)
$ printf 'file %s\n' ${first[@]} ${files:|first}
file input3.EXT
file input5.EXT
file input1.EXT
file input2.EXT
file subdir/subdirfile1.EXT
file input4.EXT