2012-06-08 70 views
1

我是shell编程的新手。 基本上,我写了一个小脚本执行时在特定的文件夹中清除某些文件类型:通过shell删除文件

#!/bin/bash 
echo "cleaning temp extensions " 
find -type f -name '*.pyc' -exec rm -f {} ';' 
find -type f -name '.*.swp' -exec rm -f {} ';' 
find -type f -name '*~' -exec rm -f {} ';' 
echo "files cleaned!!" 

但现在,我想清理从那里这个shell脚本存在的文件夹中的所有文件。

因此,举例来说,如果我有像

folderA/ folderB/ folderC/ clean.sh 

当我运行这个clean.sh它删除folderA FolderB中的所有文件类型和夹C 我应该做的这个脚本什么修改? 谢谢。

+0

谁投谁的“关闭”..你能告诉我这是怎么回事.. 只要看一边有关的答案.. – Fraz

+0

这似乎更相关的东西,我期望一个“超级用户”是能够做到。这不是个人的,并没有跟着投票。它只是熟悉常用的shell工具。现在,如果这个问题正在讨论一些循环或递归调用的bash语法...更多“编程”。 – 2012-06-08 18:45:08

+0

@pst:很酷。谢谢你的提示 :) – Fraz

回答

1

这并不完全清楚你要求什么。

删除所有文件在当前目录:

find . -maxdepth 1 -type -f -delete 

要删除当前目录下的所有文件中的所有目录它下面:

find . -type -f -delete 

要删除当前所有文件和目录目录:

find . -delete 

如果你真的要删除“所有文件fr om这个shell脚本所在的文件夹,“这真是太疯狂了。为什么要将脚本复制到目录中以删除该目录中的文件?如果你的意思是“我wan't能够与在指定的目录或目录指定的扩展删除文件”,那么它的工作是这样的:

#!/usr/bin/env bash 

find "[email protected]" -type f \(-name '*.pyc' -o -name '*.swp' -o -name '*.~' \) -delete 

而在你的PATH这个保存到一个目录(例如/usr/local/bin),那么你可以说:

clean.sh folderA folderB folderC 

或任何其他你想要的。

2

可以将所有3个查找命令组合成一个像这样的:

find -type f \(-name '*.pyc' -o -name '.*.swp' -o -name '*~' \) -exec rm -f {} \; 

我们执行这个发现在folderA使用:

find folderA/ -type f \(-name '*.pyc' -o -name '.*.swp' -o -name '*~' \) -exec rm -f {} \; 
0

要删除所有文件,删除-name ...过滤器:

find -type f -exec rm -f {} ';' 

明显的警告:小心这一点。