【发布时间】:2014-10-27 21:51:11
【问题描述】:
我下面的代码应该递归查找包含 doc/docx 文件的文件夹,并仅归档其路径中的文件夹。当在 tar 中查找时为空。 tar 因 Cowardly 拒绝创建空存档而中断。我使用 -maxdepth 1 来避免它,但不确定这是否是正确的解决方案。另一个问题是 oring 不能按预期工作。如果 notes 存在,则 test 将被忽略。有什么建议? 也欢迎提出一些代码优化建议
for D in $(find . ! -newermt $date1 -ipath "*test*" -or -ipath "*notest*" -iregex ".*\.\(doc\|docx\)" -printf "%h\n" | sort -u)
do :
cd $D && tar --no-recursion --ignore-failed-read -czf archive.tar.zip $(find . -maxdepth 1 -iname "*.doc" -or -iname "*.docx" ) --remove-files
cd ~
done
例子
Test
|____ test
| |___ subtest ___ 1.doc
| |___ 2.doc
| |___ 3.pdf
|____ notest ___ 1.doc
|___ 2.docx
预期
Test
|___ test
| |___ subtest ___ archive.tar.zip (contains docs)
| |___ 3.pdf
|___ notest ___ archive.tar.zip (contains docs)
【问题讨论】:
-
这是个思路,因为这是一个云存储,可以被不同的站运行不同的操作系统打开。所以不想用工具限制用户。
-
更改文件名不会更改文件格式。如果要创建 zip 存档,则必须使用可以执行此操作的工具。 Tar 可能不是那个工具。如果您想要在几乎所有类 unix 系统中以相同方式工作的东西,
.tar.gz可能是您的最佳选择。如果您希望与 Windows 兼容,ZIP 可能是更好的选择。无论哪种方式,您都需要合适的工具来完成这项工作。 -
真实故事。你绝对是对的,但这并不是说实话的全部代码。它是自动执行所有归档和备份的代码的一部分。这是逻辑的总结,但使用的压缩工具是
.zip。我的坏我之前没有说清楚。谢谢!