我有一个多层文件夹示例a(b(c(d(u,v)))))
这里每一层都有一个文件夹sync
,例如在每个目录中都有sync
文件夹,即a/sync
,a/b/sync
等。
我想写一个shell或tcl脚本,它将在每个文件夹中删除特定的文件(同步)。
谁能给我指路?
Thanks
Good day
您可以使用rmdir ./**/.sync
.
这将在当前目录中递归搜索每个名为sync
的目录并删除它。
关于双星号的使用也参见这个答案
注意,这只会删除目录(文件夹),如果它不是空的。
删除包含所有文件的目录,使用rm -r ./**/.sync
查找并删除…
find . -type d -name sync -exec rm -rf {} ;
解释:
.
:搜索当前目录-type d
:只搜索 目录-name sync
:搜索文件/目录名为"sync
">-exec ...
:对找到的每个文件/目录执行此命令rm -rf
: remove file and directories named…{}
:被find
命令 找到的每个文件/目录替换;
:和-exec
选项
由于到目前为止所有的答案都是shell方法,这里有一个tcl方法:
#!/usr/bin/env tclsh
proc delete_syncs {dir} {
foreach subdir [glob -directory $dir -types d -nocomplain *] {
delete_syncs $subdir
set sync [file join $subdir .sync] ;# Or sync or .SYNC or whatever it's actually named
if {[file exists $sync]} {
file delete -force -- $sync
}
}
}
foreach basedir $argv {
delete_syncs $basedir
}
将要扫描的基目录(或多个目录)作为命令行参数。