如何用find实现删除指定目录下的非目录1...9的其他目录?
-
- 帖子: 78
- 注册时间: 2006-12-03 10:43
如何用find实现删除指定目录下的非目录1...9的其他目录?
俺想将 /usr/share/locale下的除zh_CN外的文件夹删除,locale.alias和zh_CN目录内的东西不能删除
将/usr/share/man下的除中文、英文外的帮助文件删除。。。
$ find /usr/share/locale -maxdepth 0 \( -type d ! -name "zh_CN" \) -exec ls {} \;
am cs de_AT el et fr hu ja lt nl pt_BR si tr vi
ar da de_CH en_GB eu gl id ko lv no pt_PT sk uk zh_CN
ca de de_DE es fi he it locale.alias nb_NO pl ru sv ur zh_TW
结果错误,zh_CN被列出来了
$ ls /usr/share/man
es jp man0p man1p man3 man3x man5 man7 mann sv
fr man man1 man2 man3p man4 man6 man8 nl zh_CN
$ find /usr/share/man -maxdepth 0 \( -type d ! -name "man*" -name "zh_CN" \) -exec ls {} \;
$ find /usr/share/man -maxdepth 1 \( -type d ! -name "man*" ! -name "zh_CN" \) -exec ls {} \;
man1
man1
man1
man1
man1
$ find /usr/share/man -maxdepth 0 \( -type d ! -name "man*" ! -name "zh_CN" \) -exec ls {} \;
也错误。。。。
同时俺想将这个功能——删除指定目录下 除。。。以外的所有目录
rm-dir-except ()
{
#$0, 需要清理的目标目录;
#$1, ... 需要排除的目录;
find $0 -maxdepth 0 .....
}
以下是俺最开始实现的脚本,但俺认为功能强大的find应该可以完成这个简单动作——删除/usr/share/locale下非zh_CN的目录, zh_CN的下级目录自然是不能删除的。。。
#!/bin/bash
ls /usr/share/locale >>/tmp/del.txt
cat "/tmp/del.txt"| grep -v "^#" | while read dirname; do
if [ "$dirname" != "zh_CN" ] && [ "$dirname" != "locale.alias" ]; then
echo " 删除语言包$dirname"
rm -rf "/usr/share/locale/$dirname"
else
echo " 保留语言包$dirname"
echo "/usr/share/locale/$dirname"
fi
done
但这个基本也不具备通用性——删除指定目录下除指定的目录外的目录。。。
比如要实现删除/usr/share/man下除zh_CN和英文帮助外的所有帮助文件,代码就很麻烦的了。。。
哪位高手兄弟能帮忙下? 多谢了
将/usr/share/man下的除中文、英文外的帮助文件删除。。。
$ find /usr/share/locale -maxdepth 0 \( -type d ! -name "zh_CN" \) -exec ls {} \;
am cs de_AT el et fr hu ja lt nl pt_BR si tr vi
ar da de_CH en_GB eu gl id ko lv no pt_PT sk uk zh_CN
ca de de_DE es fi he it locale.alias nb_NO pl ru sv ur zh_TW
结果错误,zh_CN被列出来了
$ ls /usr/share/man
es jp man0p man1p man3 man3x man5 man7 mann sv
fr man man1 man2 man3p man4 man6 man8 nl zh_CN
$ find /usr/share/man -maxdepth 0 \( -type d ! -name "man*" -name "zh_CN" \) -exec ls {} \;
$ find /usr/share/man -maxdepth 1 \( -type d ! -name "man*" ! -name "zh_CN" \) -exec ls {} \;
man1
man1
man1
man1
man1
$ find /usr/share/man -maxdepth 0 \( -type d ! -name "man*" ! -name "zh_CN" \) -exec ls {} \;
也错误。。。。
同时俺想将这个功能——删除指定目录下 除。。。以外的所有目录
rm-dir-except ()
{
#$0, 需要清理的目标目录;
#$1, ... 需要排除的目录;
find $0 -maxdepth 0 .....
}
以下是俺最开始实现的脚本,但俺认为功能强大的find应该可以完成这个简单动作——删除/usr/share/locale下非zh_CN的目录, zh_CN的下级目录自然是不能删除的。。。
#!/bin/bash
ls /usr/share/locale >>/tmp/del.txt
cat "/tmp/del.txt"| grep -v "^#" | while read dirname; do
if [ "$dirname" != "zh_CN" ] && [ "$dirname" != "locale.alias" ]; then
echo " 删除语言包$dirname"
rm -rf "/usr/share/locale/$dirname"
else
echo " 保留语言包$dirname"
echo "/usr/share/locale/$dirname"
fi
done
但这个基本也不具备通用性——删除指定目录下除指定的目录外的目录。。。
比如要实现删除/usr/share/man下除zh_CN和英文帮助外的所有帮助文件,代码就很麻烦的了。。。
哪位高手兄弟能帮忙下? 多谢了
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
-
- 帖子: 92
- 注册时间: 2008-05-25 22:58
Re: 如何用find实现删除指定目录下的非目录1...9的其他目录?
find /usr/share/locale -maxdepth 0 \( -type d ! -name "zh_CN" \) -exec ls {} \;
find 到/usr/share/locale这个文件夹,由于设置了maxdepth 0。所有只对/usr/share/locale这个文件夹操作exec后面的ls,那当然是列出全部内容了,当然也包括zh_CN。
find /usr/share/locale/* -maxdepth 0 -type d ! -iregex ".*zh.CN" -exec echo {} \;
这样就可以列出 /usr/share/locale/ 下不包含zh_CN的所有文件夹了。
新人见解,请验证后在进行操作。
find 到/usr/share/locale这个文件夹,由于设置了maxdepth 0。所有只对/usr/share/locale这个文件夹操作exec后面的ls,那当然是列出全部内容了,当然也包括zh_CN。
find /usr/share/locale/* -maxdepth 0 -type d ! -iregex ".*zh.CN" -exec echo {} \;
这样就可以列出 /usr/share/locale/ 下不包含zh_CN的所有文件夹了。
新人见解,请验证后在进行操作。
-
- 帖子: 78
- 注册时间: 2006-12-03 10:43
Re: 如何用find实现删除指定目录下的非目录1...9的其他目录?
楼上的解决方案ok! 多谢!
$ find /usr/share/locale/* -maxdepth 0 -type d ! -iregex ".*zh.CN" -exec echo {} \;
/usr/share/locale/ar
/usr/share/locale/ca
/usr/share/locale/cs
/usr/share/locale/da
/usr/share/locale/de
/usr/share/locale/de_AT
/usr/share/locale/de_CH
/usr/share/locale/de_DE
/usr/share/locale/el
/usr/share/locale/en_GB
/usr/share/locale/es
/usr/share/locale/et
/usr/share/locale/eu
/usr/share/locale/fi
/usr/share/locale/fr
/usr/share/locale/gl
/usr/share/locale/he
/usr/share/locale/hu
/usr/share/locale/it
/usr/share/locale/ja
/usr/share/locale/ko
/usr/share/locale/lt
/usr/share/locale/lv
/usr/share/locale/nb_NO
/usr/share/locale/nl
/usr/share/locale/no
/usr/share/locale/pl
/usr/share/locale/pt_BR
/usr/share/locale/pt_PT
/usr/share/locale/ru
/usr/share/locale/sk
/usr/share/locale/sv
/usr/share/locale/tr
/usr/share/locale/ur
/usr/share/locale/vi
/usr/share/locale/zh_TW
$ find /usr/share/locale/* -maxdepth 0 -type d ! -iregex ".*zh.CN" -exec echo {} \;
/usr/share/locale/ar
/usr/share/locale/ca
/usr/share/locale/cs
/usr/share/locale/da
/usr/share/locale/de
/usr/share/locale/de_AT
/usr/share/locale/de_CH
/usr/share/locale/de_DE
/usr/share/locale/el
/usr/share/locale/en_GB
/usr/share/locale/es
/usr/share/locale/et
/usr/share/locale/eu
/usr/share/locale/fi
/usr/share/locale/fr
/usr/share/locale/gl
/usr/share/locale/he
/usr/share/locale/hu
/usr/share/locale/it
/usr/share/locale/ja
/usr/share/locale/ko
/usr/share/locale/lt
/usr/share/locale/lv
/usr/share/locale/nb_NO
/usr/share/locale/nl
/usr/share/locale/no
/usr/share/locale/pl
/usr/share/locale/pt_BR
/usr/share/locale/pt_PT
/usr/share/locale/ru
/usr/share/locale/sk
/usr/share/locale/sv
/usr/share/locale/tr
/usr/share/locale/ur
/usr/share/locale/vi
/usr/share/locale/zh_TW
-
- 帖子: 92
- 注册时间: 2008-05-25 22:58
Re: 如何用find实现删除指定目录下的非目录1...9的其他目录?
发个东东,自己研究下,应该可以达到你的要求
#!/bin/bash
echo "哪个文件夹下的内容你想要删除"
read deldir
[ ! -d $deldir ] && 不存在你指定的文件夹 && exit
#deldir=`echo "$deldir" | sed 's/\/$//'`
echo "哪些文件你想要保留,请输入名称,名称之间用空格隔开"
read keepfile
keepfile=(`echo $keepfile`)
find "$deldir" -maxdepth 1 | while read line ; do
case $line in
$deldir) :;;
*) test=`basename $line` && for test2 in ${keepfile[@]} ; do
[ "$test" == "$test2" ] && break ; done || echo $line;; ##echo $line把这里改成你想要的命令
esac
done
上次由 gududehuo 在 2009-02-11 14:50,总共编辑 1 次。
-
- 帖子: 92
- 注册时间: 2008-05-25 22:58
Re: 如何用find实现删除指定目录下的非目录1...9的其他目录?
还有问下ee,find 下! -name 也可以排除指定的一个文件名,但如果是多个该怎么写?
-
- 帖子: 78
- 注册时间: 2006-12-03 10:43
Re: 如何用find实现删除指定目录下的非目录1...9的其他目录?
gududehuo 写了:发个东东,自己研究下,应该可以达到你的要求#!/bin/bash
echo "哪个文件夹下的内容你想要删除"
read deldir
[ ! -d $deldir ] && 不存在你指定的文件夹 && exit
#deldir=`echo "$deldir" | sed 's/\/$//'`
echo "哪些文件你想要保留,请输入名称,名称之间用空格隔开"
read keepfile
keepfile=(`echo $keepfile`)
find "$deldir" -maxdepth 1 | while read line ; do
case $line in
$deldir) :;;
*) test=`basename $line` && for test2 in ${keepfile[@]} ; do
[ "$test" == "$test2" ] && break ; done || echo $line;; ##echo $line把这里改成你想要的命令
esac
done
多谢!
有用,俺会将其转化为函数,在shell中引用。。。
-
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
Re: 如何用find实现删除指定目录下的非目录1...9的其他目录?
太长了,没太看清楚具体要求。
不过在 find 后加 -exec echo {} \; 实在是有点舍近求远,一个 -print 或者干脆什么也没有就实现相同的功能。
不过在 find 后加 -exec echo {} \; 实在是有点舍近求远,一个 -print 或者干脆什么也没有就实现相同的功能。
- JustinLei
- 帖子: 85
- 注册时间: 2005-09-20 14:29
- 来自: 弯弯的月亮
Re: 如何用find实现删除指定目录下的非目录1...9的其他目录?
没搞明白,这样不行么?
难道是我理解错你的需求了..呵呵
代码: 全选
ls -a | egrep -v [*zh.CN*] | xargs rm -Rvf
- charleskao
- 帖子: 206
- 注册时间: 2008-03-27 17:21
Re: 如何用find实现删除指定目录下的非目录1...9的其他目录?
rm -dir -f dirname
- liangwilliam
- 帖子: 36
- 注册时间: 2008-07-27 11:16
- 来自: 廣州
-
- 帖子: 6548
- 注册时间: 2008-10-31 22:12
- 系统: 践兔
- 联系:
Re: 如何用find实现删除指定目录下的非目录1...9的其他目录?
用find 干吗,自讨苦吃阿。
不就行了。
代码: 全选
for dir in /path/to/your/dir/* ; do
[ "$dir" = "要排除的目录" ] || rm -ri "$dir"
done
代码: 全选
] ls -ld //
- BigSnake.NET
- 帖子: 12522
- 注册时间: 2006-07-02 11:16
- 来自: 廣州
- 联系:
Re: 如何用find实现删除指定目录下的非目录1...9的其他目录?
这些事情
建议在 rm 前面加个 echo , 确认无误再执行
建议在 rm 前面加个 echo , 确认无误再执行
^_^ ~~~
要理解递归,首先要理解递归。
地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
要理解递归,首先要理解递归。
地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。