題 通過ls列出除* {.tex,.aux}以外的所有內容


你怎麼 ls 其他一切文件 *{.tex, .aux}

我跑得不成功

ls -I".tex"

4
2017-08-30 19:09


起源


有人可以/除了/ g除外嗎? - las3rjock


答案:


謝謝 @sth的答案,我終於找到了 ls 使用前綴選擇glob模式的命令(hide選項不起作用);考慮:

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

所以,這種情況的答案是使用 ls PREFIX*.!(ext1|ext2),或換句話說:“列出以'PREFIX'開頭的文件和任何字符,直到點'。',後面沒有ext1或ext2”。


1
2017-10-11 15:01



我認為這是最好的答案,因為它有最準確的解釋,為什麼最後一種方法是正確的選擇。感謝您的回答,並提供清晰的解釋! - Léo Léopold Hertz 준영


ls -I*.tex -I*.aux

要么

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

10
2017-08-30 19:17





如果你使用bash並擁有 extglob shell選項集(通常是這種情況):

ls !(*.tex|*.aux)

9
2017-08-30 19:48



這是一個。在ServerFault上查看同樣的問題: serverfault.com/questions/41783/... - Telemachus
或Stack Overflow上的這個問題: stackoverflow.com/questions/670460/move-all-files-except-one  這是同一個用戶的問題,我已經給出了相同的答案...... - sth
@Sth:嗯,你至少從我身上得到了兩個贊成票。 (我只記得Serverfault上的線程,因為我在那裡學到了這個技巧。) - Telemachus


如果您使用zsh並設置了EXTENDED_GLOB選項:

pattern~negpattern

其中'pattern'是你想要匹配的東西,除了匹配'negpattern'的東西。

例:

ls -d *~*.mp3

將列出您的cwd中的所有文件,但以“.mp3”結尾的文件除外。

如果您沒有使用zsh,請嘗試一下,這種智能擴展無處不在。


0
2017-08-02 20:16





你可以使用:

ls | grep -v *.tex | grep -v *.aux

0
2017-08-30 19:17



我認為這不符合你的想法。 grep 將正則表達式作為參數,而不是shell通配符。此外,無論如何,shell將首先擴展這些通配符。 - Greg Hewgill
“ls | grep -v .tex | grep -v .aux”似乎有效。 (在我的機器上,ls不帶-I或--hide標誌。) - las3rjock
你也可以使用egrep的正則表達式: ls | egrep -v '(aux|tex)$' - mtak