分页: 1 / 1

求教如何完善这条命令?

发表于 : 2012-04-01 11:47
drunkfish
想清除目录中LATEX生成的中间文件,用了以下命令:

代码: 全选

ls | grep -Ev '(\.tex|\.pdf|\.jpg)$' | xargs rm 
发觉对包含空格的长文件名无效。请教解决办法,谢谢。

Re: 求教如何完善这条命令?

发表于 : 2012-04-01 12:11
erasinoo

代码: 全选

ls -Q | grep -Ev '(\.tex\"|\.pdf\"|\.jpg\")$' | xargs rm

Re: 求教如何完善这条命令?

发表于 : 2012-04-02 9:40
aerofox

代码: 全选

shopt -s extglob
rm !(*.tex|*.pdf|*.jpg)

Re: 求教如何完善这条命令?

发表于 : 2012-04-02 11:52
cao627
:em11 学习

Re: 求教如何完善这条命令?

发表于 : 2012-04-02 12:24
cao627
mkdir “a a“
mkdir a.tex
mkdir a.texa

代码: 全选

ls -Q | grep -v '\.tex$' | xargs rm -r

为什么创建的三个文件都被删除了?



想明白了
ls -Q | grep -v '\.tex"$'
ls -Q列出的文件都是带“”的,传给grep的也是带“”的

所以要匹配到“a.tex” 而排除“a.texa” 要在$前加个“

Re: 求教如何完善这条命令?

发表于 : 2012-04-02 13:08
lilydjwg
aerofox 写了:

代码: 全选

shopt -s extglob
rm !(*.tex|*.pdf|*.jpg)
zsh 版,默认配置:

代码: 全选

rm ^*.(tex|pdf|jpg|png)

Re: 求教如何完善这条命令?

发表于 : 2012-04-02 16:36
aerofox
lilydjwg 写了:
aerofox 写了:

代码: 全选

shopt -s extglob
rm !(*.tex|*.pdf|*.jpg)
zsh 版,默认配置:

代码: 全选

rm ^*.(tex|pdf|jpg|png)
zsh 确实很好的,其实我也是默认用的 zsh。

Re: 求教如何完善这条命令?

发表于 : 2012-04-06 9:34
Methuselar

代码: 全选

find . -type f -regex ".*\.\(pdf\|jpg\|tex\)$" -exec rm -f {} \;
有空格,找find

Re: 求教如何完善这条命令?

发表于 : 2012-04-06 13:04
drunkfish
Methuselar 写了:

代码: 全选

find . -type f -regex ".*\.\(pdf\|jpg\|tex\)$" -exec rm -f {} \;
有空格,找find
害人啊!把要的都删了,垃圾全留下了。

Re: 求教如何完善这条命令?

发表于 : 2012-04-06 14:11
lilydjwg
drunkfish 写了:
Methuselar 写了:

代码: 全选

find . -type f -regex ".*\.\(pdf\|jpg\|tex\)$" -exec rm -f {} \;
有空格,找find
害人啊!把要的都删了,垃圾全留下了。
!

Re: 求教如何完善这条命令?

发表于 : 2012-04-06 18:10
aerofox
如果只是直接属于一个目录下的文件,不用递归查找子目录,实在没必要用 find。如果要递归查找子目录,可以使用 find 加 -exec 参数,也可以 find 加 -print0 然后管道到 xargs -0 命令,或者使用 zsh 的话,也可以直接用 zsh 的递归查找功能。

代码: 全选

rm **/^*.(tex|pdf|jpg|png)(.)