求教如何完善这条命令?

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
drunkfish
帖子: 76
注册时间: 2011-04-30 17:17

求教如何完善这条命令?

#1

帖子 drunkfish » 2012-04-01 11:47

想清除目录中LATEX生成的中间文件,用了以下命令:

代码: 全选

ls | grep -Ev '(\.tex|\.pdf|\.jpg)$' | xargs rm 
发觉对包含空格的长文件名无效。请教解决办法,谢谢。
怅怅莫怪少时年 百丈游丝易惹牵
何岁逢春不惆怅 何处逢情不可怜
杜曲梨花杯上雪 灞陵芳草梦中烟
前程两袖黄金泪 公案三生白骨禅
老后思量应不悔 衲衣持钵院门前
头像
erasinoo
帖子: 145
注册时间: 2009-08-31 9:05
来自: 随风而动

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

#2

帖子 erasinoo » 2012-04-01 12:11

代码: 全选

ls -Q | grep -Ev '(\.tex\"|\.pdf\"|\.jpg\")$' | xargs rm
------------------------------------------------------
在折腾中上升,在折腾中进步
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

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

#3

帖子 aerofox » 2012-04-02 9:40

代码: 全选

shopt -s extglob
rm !(*.tex|*.pdf|*.jpg)
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山

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

#4

帖子 cao627 » 2012-04-02 11:52

:em11 学习
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山

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

#5

帖子 cao627 » 2012-04-02 12:24

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” 要在$前加个“
头像
lilydjwg
论坛版主
帖子: 4249
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

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

#6

帖子 lilydjwg » 2012-04-02 13:08

aerofox 写了:

代码: 全选

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

代码: 全选

rm ^*.(tex|pdf|jpg|png)
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

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

#7

帖子 aerofox » 2012-04-02 16:36

lilydjwg 写了:
aerofox 写了:

代码: 全选

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

代码: 全选

rm ^*.(tex|pdf|jpg|png)
zsh 确实很好的,其实我也是默认用的 zsh。
头像
Methuselar
帖子: 122
注册时间: 2009-06-04 12:06
联系:

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

#8

帖子 Methuselar » 2012-04-06 9:34

代码: 全选

find . -type f -regex ".*\.\(pdf\|jpg\|tex\)$" -exec rm -f {} \;
有空格,找find
Mea Culpa!
头像
drunkfish
帖子: 76
注册时间: 2011-04-30 17:17

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

#9

帖子 drunkfish » 2012-04-06 13:04

Methuselar 写了:

代码: 全选

find . -type f -regex ".*\.\(pdf\|jpg\|tex\)$" -exec rm -f {} \;
有空格,找find
害人啊!把要的都删了,垃圾全留下了。
怅怅莫怪少时年 百丈游丝易惹牵
何岁逢春不惆怅 何处逢情不可怜
杜曲梨花杯上雪 灞陵芳草梦中烟
前程两袖黄金泪 公案三生白骨禅
老后思量应不悔 衲衣持钵院门前
头像
lilydjwg
论坛版主
帖子: 4249
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

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

#10

帖子 lilydjwg » 2012-04-06 14:11

drunkfish 写了:
Methuselar 写了:

代码: 全选

find . -type f -regex ".*\.\(pdf\|jpg\|tex\)$" -exec rm -f {} \;
有空格,找find
害人啊!把要的都删了,垃圾全留下了。
!
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

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

#11

帖子 aerofox » 2012-04-06 18:10

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

代码: 全选

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