因此,对于删除与某些情况匹配的文件/目录,似乎有几个问题要问,但我要寻找的恰恰相反:删除与我提供的示例不匹配的文件夹中的所有内容。
例如,下面是一个目录树示例:
.
|-- coke
| |-- diet
| |-- regular
| `-- vanilla
|-- icecream
| |-- chocolate
| |-- cookiedough
| |-- cupcake
| | |-- file1.txt
| | |-- file2.txt
| | |-- file3.txt
| | |-- file4.txt
| | `-- file5.txt
| `-- vanilla
|-- lol.txt
|-- mtndew
| |-- classic
| |-- codered
| |-- livewire
| | |-- file1.txt
| | |-- file2.txt
| | |-- file3.txt
| | |-- file4.txt
| | `-- file5.txt
| `-- throwback
`-- pepsi
|-- blue
|-- classic
|-- diet
`-- throwback
我想删除test/icecream/cupcake/和test/mtndew/livewire/中的所有文件。其他一切都可以去,包括目录结构。那么,我怎样才能做到这一点呢?我不介意使用的语言有:bash或python。
此命令将只在原始目录中保留所需的文件:
不需要cpio。它在Ubuntu、Debian 5和Mac OS X上工作
在Linux上,它将报告不能删除非空目录,这正是所需的结果。在Mac OS X上,它会悄悄地做正确的事情。
想到的是
find
的-prune
,但让它为特定路径(而不是特定目录)工作是一件痛苦的事。就我个人而言,我只需要使用
cpio
和硬链接(以避免复制它们)将目录中的文件保存到新树中,然后删除旧树:这也将保留您打算保留的目录的现有目录结构。
所有的“除外”都是我们有if语句的原因;以及os.walk的目录列表是可变列表的原因。
相关问题 更多 >
编程相关推荐