【发布时间】:2021-02-20 08:11:52
【问题描述】:
如何将目录及其子目录中的所有PDF 文件复制到单个目录?
实际上还有更多的文件,而且深度有些随意。假设四个目录的最大深度是公平的。
我想文件需要重命名,例如a.pdf 位于多个目录中。因为我将adding 将文件发送给Calibre,所以重复文件优于遗漏文件。 (不希望相互检查文件是否有重复。)
遵循 KISS 原则:
PS /home/nicholas/to>
PS /home/nicholas/to> Copy-Item -path "/home/nicholas/from" -include "*.pdf" -Destination "/home/nicholas/to"
PS /home/nicholas/to>
PS /home/nicholas/to> ls /home/nicholas/to
PS /home/nicholas/to>
PS /home/nicholas/to> ls /home/nicholas/from
one two
PS /home/nicholas/to>
PS /home/nicholas/to> tree /home/nicholas/from
/home/nicholas/from
├── one
│ ├── a.pdf
│ ├── b.pdf
│ └── foo.txt
└── two
├── bar.txt
├── c.pdf
└── d.pdf
2 directories, 6 files
PS /home/nicholas/to>
显然,上述尝试未能遍历到子目录,并且不处理名称冲突。
在复制每个 PDF 时重命名它可能是有意义的。 recurse 标志似乎很有用:
PS /home/nicholas/to>
PS /home/nicholas/to> ls
PS /home/nicholas/to>
PS /home/nicholas/to> Copy-Item -Path "/home/nicholas/from" -Destination "/home/nicholas/to" -Recurse
PS /home/nicholas/to>
PS /home/nicholas/to> tree
.
└── from
├── one
│ ├── a.pdf
│ ├── b.pdf
│ └── foo.txt
└── two
├── bar.txt
├── c.pdf
└── d.pdf
3 directories, 6 files
PS /home/nicholas/to>
不过,不确定如何过滤掉 txt 文件并将所有内容放到一个目录中。
复制所有PDF 文件,some 成功:
PS /home/nicholas/to>
PS /home/nicholas/to> ls
PS /home/nicholas/to>
PS /home/nicholas/to> tree /home/nicholas/from/
/home/nicholas/from/
├── one
│ ├── a.pdf
│ ├── b.pdf
│ └── foo.txt
└── two
├── bar.txt
├── c.pdf
└── d.pdf
2 directories, 6 files
PS /home/nicholas/to>
PS /home/nicholas/to> Get-ChildItem /home/nicholas/from -File -Recurse | Copy-Item -Destination /home/nicholas/to -filter '*.pdf'
PS /home/nicholas/to>
PS /home/nicholas/to> tree
.
├── a.pdf
├── bar.txt
├── b.pdf
├── c.pdf
├── d.pdf
└── foo.txt
0 directories, 6 files
PS /home/nicholas/to>
但是如何添加一些逻辑来重命名和增加具有1.pdf、2.pdf 等模式的文件?
希望将带有 PDF 的文件夹“合并”到 single 目录。
【问题讨论】:
-
你可以用我的Copy-Unique function 来做这个
-
@Theo,这真的很有用!如果可以的话,我会抢走那个脚本
标签: linux powershell file pdf copy