Перечисление всего, кроме * {. Tex, .aux} от ls

5979
Léo Léopold Hertz 준영

Как вы можете lsвсе остальное файлы *{.tex, .aux}?

Я бегаю неудачно

ls -I".tex" 
4
Может ли кто-нибудь s / else, кроме / кроме / g? las3rjock 14 лет назад 0

5 ответов на вопрос

10
ire_and_curses
ls -I*.tex -I*.aux 

или же

ls --hide=*.tex --hide=*.aux 
9
sth

Если вы используете bash и у вас установлена extglobопция оболочки (что обычно и происходит):

ls !(*.tex|*.aux) 
Это тот самый. Посмотрите этот же вопрос на ServerFault: http://serverfault.com/questions/41783/how-can-i-specify-a-shell-pattern-that-excludes-termin-files Telemachus 14 лет назад 1
Или этот вопрос в переполнении стека: http://stackoverflow.com/questions/670460/move-all-files-except-one Вопрос от того же пользователя, на котором я уже дал тот же ответ ... sth 14 лет назад 1
@Sth: Ну, ты получил от меня по крайней мере два возражения. (Я вспомнил только тему о Serverfault, так как я изучил этот трюк там.) Telemachus 14 лет назад 1
1
sdaau

Thanks to @sth's answer, I finally found an ls command which works with a prefix selection glob pattern (there the hide option doesn't work); consider:

touch MyDocument{.aux,.auxlock,.bbl,.bcf,.blg,.log,.out,.pgf-plot.gnuplot,.run.xml,.tex,.toc} touch YourDocument{.aux,.auxlock,.bbl,.bcf,.blg,.log,.out,.pgf-plot.gnuplot,.run.xml,.tex,.toc} ls # list all # MyDocument.aux YourDocument.aux # MyDocument.auxlock YourDocument.auxlock # MyDocument.bbl YourDocument.bbl # MyDocument.bcf YourDocument.bcf # MyDocument.blg YourDocument.blg # MyDocument.log YourDocument.log # MyDocument.out YourDocument.out # MyDocument.pgf-plot.gnuplot YourDocument.pgf-plot.gnuplot # MyDocument.run.xml YourDocument.run.xml # MyDocument.tex YourDocument.tex # MyDocument.toc YourDocument.toc ls MyDocument.* # prefix search glob only, works fine # MyDocument.aux MyDocument.bcf MyDocument.out MyDocument.tex # MyDocument.auxlock MyDocument.blg MyDocument.pgf-plot.gnuplot MyDocument.toc # MyDocument.bbl MyDocument.log MyDocument.run.xml ls --hide='*.tex' # works if no search glob is used # MyDocument.aux MyDocument.pgf-plot.gnuplot YourDocument.blg # MyDocument.auxlock MyDocument.run.xml YourDocument.log # MyDocument.bbl MyDocument.toc YourDocument.out # MyDocument.bcf YourDocument.aux YourDocument.pgf-plot.gnuplot # MyDocument.blg YourDocument.auxlock YourDocument.run.xml # MyDocument.log YourDocument.bbl YourDocument.toc # MyDocument.out YourDocument.bcf ls --hide='*.tex' MyDocument.* # does NOT work with prefix glob! # MyDocument.aux MyDocument.bcf MyDocument.out MyDocument.tex # MyDocument.auxlock MyDocument.blg MyDocument.pgf-plot.gnuplot MyDocument.toc # MyDocument.bbl MyDocument.log MyDocument.run.xml ls MyDocument!(.tex|.aux) # works with (FULL!) prefix # MyDocument.auxlock MyDocument.blg MyDocument.pgf-plot.gnuplot # MyDocument.bbl MyDocument.log MyDocument.run.xml # MyDocument.bcf MyDocument.out MyDocument.toc ls MyDocu*!(.tex|.aux) # does NOT work w/ partial prefix # if * pattern does not terminate (is last before !) # MyDocument.aux MyDocument.bcf MyDocument.out MyDocument.tex # MyDocument.auxlock MyDocument.blg MyDocument.pgf-plot.gnuplot MyDocument.toc # MyDocument.bbl MyDocument.log MyDocument.run.xml ls MyDocu*.!(tex|aux) # does work w/ partial prefix, if * pattern terminates # (here termination is with dot . coming before ! ) # MyDocument.auxlock MyDocument.blg MyDocument.pgf-plot.gnuplot # MyDocument.bbl MyDocument.log MyDocument.run.xml # MyDocument.bcf MyDocument.out MyDocument.toc 

So, the answer for this case is to use ls PREFIX*.!(ext1|ext2), or in other words: "list files starting with 'PREFIX' and any characters until a dot '.', which is not followed by ext1 or ext2".

Я думаю, что это лучший ответ, потому что он имеет самые точные объяснения, почему последний подход является правильным выбором. Спасибо за ваш ответ с четким объяснением! Léo Léopold Hertz 준영 9 лет назад 1
0
Atmocreations

Вы можете использовать:

ls | grep -v *.tex | grep -v *.aux 
Я не думаю, что это делает то, что вы думаете, что делает. `grep` принимает регулярные выражения в качестве параметров, а не групповые символы оболочки. Кроме того, оболочка в любом случае будет расширять эти шаблоны. Greg Hewgill 14 лет назад 0
"ls | grep -v .tex | grep -v .aux", кажется, работает. (На моей машине ls не принимает флаги -I или --hide.) las3rjock 14 лет назад 0
Вы также можете использовать регулярное выражение с egrep: `ls | egrep -v '(aux | tex) $' ` mtak 10 лет назад 0
0
anthonya7

Если вы используете zsh с установленным параметром EXTENDED_GLOB:

pattern~negpattern 

где 'pattern' - это то, что вы хотите сопоставить, за исключением всего, что соответствует 'negpattern'.

Пример:

ls -d *~*.mp3 

перечислит все файлы в вашем cwd, кроме тех, которые заканчиваются на .mp3.

Если вы не используете zsh, попробуйте, этот вид интеллектуального расширения есть везде.