查找所有 .ODT,将其压缩并带到桌面

查找所有 .ODT,将其压缩并带到桌面

我想找到 $HOME 目录中的所有 .ODT,将它们压缩并将 zip 文件带到桌面。通过执行find -type f -iname "*.odt",我得到:

./Programmierung/Hash bang.odt
./Schreibtisch/Alles/Tuberkulose/ Plan_tuberculose.odt
./Schreibtisch/Alles/Mirzanejad_Recueillement.odt
./Schreibtisch/Alles/Der Artikel/Ander/Déictiques de l'article.odt
./Schreibtisch/Alles/Der Artikel/Ander/Le plan.odt
./Schreibtisch/Alles/Der Artikel/Ander/Bibliographie.odt
./Schreibtisch/Alles/Geschrieben/corpus_historicité.odt
./Eifersucht/Ander/Le_plan_de_l'exposé_de_la_jalousie.odt
./Dokumente/Chant de guerre/Lieder/Bibliographie_Chants de guerre.odt
./Dokumente/Komparastik/Le_plan_de_Harriet.odt
./Dokumente/Komparastik/Harriet_Abji.odt

我有 11 个文件,我希望得到一个包含这 11 个文件的 zip 文件,然后将其移动到桌面。我这样做了:

zip My_odts $(find -type f -iname "*.odt") && mv ~/My_odts.zip ~/Schreibtisch

[桌面书写]

但内容我的odts.zip是三个目录:桌面、文档和我创建的目录(而不是我所有的 ODT),在这三个目录中,我看到了部分 ODT,但不是全部。我做错了什么?我想要所有 ODT,但我不知道为什么这些目录在我的 zip 文件中。

答案1

您打算做的是不保留 .zip 中文件的目录结构(这不是默认行为)

但是查看的手册页zip,该-p开关完全按照您的要求执行:

-j
--junk-paths
          Store just the name of a saved file (junk the path), and do  not
          store  directory names. By default, zip will store the full path
          (relative to the current directory).

因此您的原始命令必须修改如下:

zip -j My_odts $(find -type f -iname "*.odt") && mv ~/My_odts.zip ~/Schreibtisch

此外,创建后您不必移动文件,而是可以直接在 zip 命令中指定路径

zip -j ~/Schreibtisch/My_odts.zip $(find ~ -type f -iname "*.odt")

答案2

我想知道是否可以将所有文件放在一个目录中(而不是压缩它们),然后将该目录带到桌面。

当然可以。使用任何你想要的方法将它们复制到目标目录,然后使用 GUI 文件管理器或 shell 命令将目录移动到 ~/Desktop

mv  -v ~/DIRECTORYWHEREVERTHEFILESARE/* ~/Desktop/

由于 ODT 文件已经是 zip 压缩的,这可能会节省一些处理时间,并且包含 ODT 文件的文件夹和 ODT 文件的 zip 文件之间的大小差异很小。

现在,要在 ~Desktop 下创建一个名为 destination 的文件夹,然后搜索 /home 下的每个文件并移动每个文件,一个可能的解决方案是

cd ~/Desktop && mkdir destination && find ~/ -type f -iname  "*.odt" -exec mv {} ~/Desktop/destination \;

相关内容