Existe-t-il un moyen de répertorier un ensemble de, disons, 30 fichiers aléatoires à partir d'un répertoire à l'aide de commandes Linux standard? (en zsh
)
La première réponse décrite ici ne fonctionne pas pour moi ( sort
ne reconnaît pas l'option -R
)
Réponses:
Puisque vous mentionnez zsh:
Vous pouvez remplacer
print
par direogg123
et*
par dire**/*.ogg
la source
Essayez de diriger la
ls
sortie versshuf
, par exempleL'
-n
indicateur spécifie le nombre de fichiers aléatoires que vous souhaitez.la source
command not found
(non installé): /ls
.Il est assez facile de résoudre ce problème avec un tout petit peu de Perl. Sélectionnez quatre fichiers au hasard dans le répertoire actuel:
Cependant, pour une utilisation en production, j'irais avec un script développé qui ne dépend pas de la
ls
sortie, peut accepter n'importe quel répertoire, vérifie vos arguments, etc. Notez que la sélection aléatoire elle-même n'est toujours que de quelques lignes.la source
shuf
) n'était pas suffisante pour l'OP. Quant à ce qui est et n'est pas standard Unix - Perl existe partout, et il résout le problème de manière succincte et robuste. Si j'avais donné cela comme une ligne Perl, cela aurait-il compté comme «ligne de commande»? Le fait que Perl soit puissant est-il vraiment un argument contre l'existence de cette réponse?perl -MList::Util=shuffle -e 'print shuffle(
ls)' | head -n 4
Est-ce que cela ressemble plus à ce que vous cherchiez?Une solution simple qui évite l'analyse de ls et fonctionne également avec les espaces:
la source
shuf
.shuf
n'est pas mentionné dans la question. Cette réponse sera toujours utile aux autres utilisateurs.Un oneliner n'utilisant que Zsh:
La même chose dans Bash, où les indices de tableau sont basés sur zéro:
Notez qu'aucune des versions ne prend en compte les doublons.
la source