web-dev-qa-db-fra.com

En utilisant ls, comment lister les fichiers sans imprimer l'extension (la partie après le point)?

Supposons que j'ai un répertoire avec quelques fichiers:

$ ls
a.c  b.c  e.c  k.cpp  s.Java

Comment puis-je afficher le résultat sans l'extension de fichier (la partie qui suit le point, y compris ce point)? Comme ça:

$ <some command>
a
b
e
k
s
33
Yishu Fang

en utilisant sed?

ls -1 | sed -e 's/\..*$//'
50
Dyno Fu
ls | while read fname 
do
    echo ${fname%%.*}
done

Essayez ça.

12
jim mcnamara
ls -a | cut -d "." -f 1

homme (1) coupé

Très pratique, le commutateur -d définit le délimiteur et le champ -f que vous souhaitez.

EDIT: Inclure Riverfall's le scénario est également un jeu d'enfant car la coupe peut également commencer à la fin, bien que la logique soit quelque peu différente. Voici un exemple avec un tas de fichiers avec des noms aléatoires, certains avec deux points, certains avec un seul point et certains sans extension:

runlevel0@ubuntu:~/test$ ls
test.001.rpx  test.003.rpx  test.005.rpx  test.007.rpx  test.009.rpx  testxxx
test.002.rpx  test.004.rpx  test.006.rpx  test.008.rpx  test_nonum    test_xxx.rtv


runlevel0@ubuntu:~/test$ ls | cut  -d "." -f -2
test.001
test.002
test.003
test.004
test.005
test.006
test.007
test.008
test.009
test_nonum
testxxx
test_xxx.rtv

En utilisant le moins avant le numéro de champ le fait éliminer tous MAIS les champs indiqués (1,2 dans ce cas) et le mettre derrière le fait commencer à compter à partir de la fin.

Cette même notation peut être utilisée pour l'offset et les caractères en plus des champs (voir la page de manuel)

7
runlevel0