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
- 来自: 随风而动
#2
帖子
由 erasinoo » 2012-04-01 12:11
代码: 全选
ls -Q | grep -Ev '(\.tex\"|\.pdf\"|\.jpg\")$' | xargs rm
------------------------------------------------------
在折腾中上升,在折腾中进步
-
aerofox
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
#3
帖子
由 aerofox » 2012-04-02 9:40
代码: 全选
shopt -s extglob
rm !(*.tex|*.pdf|*.jpg)
-
cao627
- 帖子: 992
- 注册时间: 2007-12-05 10:57
- 系统: ubuntu14.04
- 来自: 金山
#4
帖子
由 cao627 » 2012-04-02 11:52
学习
-
cao627
- 帖子: 992
- 注册时间: 2007-12-05 10:57
- 系统: ubuntu14.04
- 来自: 金山
#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
-
联系:
#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
#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
-
联系:
#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
#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
-
联系:
#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
#11
帖子
由 aerofox » 2012-04-06 18:10
如果只是直接属于一个目录下的文件,不用递归查找子目录,实在没必要用 find。如果要递归查找子目录,可以使用 find 加 -exec 参数,也可以 find 加 -print0 然后管道到 xargs -0 命令,或者使用 zsh 的话,也可以直接用 zsh 的递归查找功能。
代码: 全选
rm **/^*.(tex|pdf|jpg|png)(.)