【发布时间】:2020-09-14 13:52:45
【问题描述】:
我正在使用
find ./*/*/*/FOO/*/*/!(!(*.tif)|*v.tif) -type f
在目录树中获取所有不以v.tif 结尾的 tiff 文件。如何编辑命令以查找路径中带有 FOO anywhere 的文件?我遇到了 globstar,但它似乎在 mac 的默认 bash 上不可用。
额外问题:Windows 提示符/Powershell 等效于什么?
【问题讨论】:
我正在使用
find ./*/*/*/FOO/*/*/!(!(*.tif)|*v.tif) -type f
在目录树中获取所有不以v.tif 结尾的 tiff 文件。如何编辑命令以查找路径中带有 FOO anywhere 的文件?我遇到了 globstar,但它似乎在 mac 的默认 bash 上不可用。
额外问题:Windows 提示符/Powershell 等效于什么?
【问题讨论】:
在完整路径名中的任意位置包含FOO:
find . -type f -wholename "*FOO*"
另外以.tif 结尾并排除*v.tif:
find . -type f -wholename "*FOO*[^v].tif"
但上面的排除了*FOO.tif的边缘情况,所以这样更好:
find . -type f -wholename "*FOO*.tif" ! -name "*v.tif"
【讨论】:
您似乎已经在使用shopt 的extglob。添加globstar。
shopt -s globstar
然后
find **/FOO/**/ -type f ! -name '*v.tif'
仅适用于 TIF
find **/FOO/**/* -type f -name '*.tif' ! -name '*v.tif'
【讨论】:
-wholename 是你最好的选择。
any/thing/FOO.tif。另外我没想到-wholename 会更快,我认为这类似于-name "*" 通过(超级命令)find 内部扩展而不是shell。
FOO 作为完整目录名称的路径。尽管如此,我还是删除了路径末端多余的*。
用于PowerShell
Get-ChildItem -Path <path> -Recurse -Filter *FOO*.tif -Exclude *v.tif
使用它来在目录名称中包含 FOO
Get-ChildItem -Path c:\ASB -Recurse -Filter *.tif -Exclude *v.tif -Include *FOO*
更通用的解决方案
Get-ChildItem -Path c:\ASB -Recurse -Filter *.tif -Exclude *v.tif | Where-Object FullName -like *FOO*
【讨论】:
FOO是一个目录,这个FOO.txt是怎么工作的?
Get-ChildItem -Path . -Recurse -Include *.tif -Exclude *v.tif 列出文件,但 -Filter 部分不起作用。这些文件不直接在FOO 下,我需要在其路径的某个点具有 FOO 的所有文件。
FOO 目录,但 FOO.tif 不返回任何内容。 -Filter .tif -Include *FOO 也不给我任何东西