删除特定文件的Shell脚本



我有一个多层文件夹示例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
}

将要扫描的基目录(或多个目录)作为命令行参数。

相关内容

  • 没有找到相关文章

最新更新