Cela dépend (a) de l'attachement que vous portez au chiffre 7 par rapport à, disons, Lemons, et (b) du fait que certains de vos noms de fichiers contiennent ou non des retours à la ligne (et si vous êtes prêt à les renommer si c'est le cas).
Il y a de nombreuses façons d'y faire face, mais certaines d'entre elles sont :
mplayer Lemon*.mp3
find . -name 'Lemon*.mp3' -exec mplayer {} ';'
i=0
for mp3 in *.mp3
do
i=$((i+1))
[ $i = 7 ] && mplayer "$mp3"
done
for mp3 in *.mp3
do
case "$mp3" in
(Lemon*) mplayer "$mp3";;
esac
done
i=0
find . -name *.mp3 |
while read mp3
do
i=$((i+1))
[ $i = 7 ] && mplayer "$mp3"
done
Le site read
ne fonctionne pas si les noms de fichiers contiennent des nouvelles lignes ; les autres fonctionnent correctement même avec des nouvelles lignes dans les noms (sans parler des espaces). À mon avis, si vos noms de fichiers contiennent une ligne de retour, vous devriez renommer le fichier sans la ligne de retour. L'utilisation des guillemets doubles autour du nom du fichier est la clé du bon fonctionnement des boucles.
Si vous avez GNU find
et GNU xargs
(ou FreeBSD (*BSD ?), ou Mac OS X), vous pouvez également utiliser la fonction -print0
y -0
options, comme dans :
find . -name 'Lemon*.mp3' -print0 | xargs -0 mplayer
Cela fonctionne quel que soit le contenu du nom (les deux seuls caractères qui ne peuvent pas apparaître dans un nom de fichier sont la barre oblique et NUL, et la barre oblique ne pose aucun problème dans un chemin de fichier, donc l'utilisation de NUL comme délimiteur de nom couvre tout). Cependant, si vous avez besoin de filtrer les 6 premières entrées, vous avez besoin d'un programme qui gère les 'lignes' terminées par NUL au lieu de newline... et je ne suis pas sûr qu'il en existe.
La première est de loin la plus simple pour le cas spécifique qui nous occupe ; cependant, elle peut ne pas être généralisée pour couvrir les autres scénarios que vous n'avez pas encore énumérés.
0 votes
Au lieu de
ls |grep mp3 |sed -n "7p"
vous pouvez simplement utiliserecho "Lemon Tree.mp3"
.1 votes
Duplicata possible de Comment puis-je utiliser xargs pour copier des fichiers dont le nom comporte des espaces et des guillemets ?
0 votes
Cette question trouve également une réponse dans stackoverflow.com/a/33528111/94687