我想找到 $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 \;