gpt4 book ai didi

linux - Bash 查找和表达

转载 作者:太空宇宙 更新时间:2023-11-04 04:13:14 25 4
gpt4 key购买 nike

有什么办法可以让它发挥作用吗?

pFile= find ${destpath} (( -iname "${mFile##*/}" )) -o (( -iname "${mFile##*/}" -a -name "*[],&<>*?|\":'()[]*" )) -exec printf '.' \;| wc -c

我需要 pFile 返回具有相同文件名的文件的数量,或者如果没有,则返回 0。我必须这样做,因为如果我只使用:

pFile= find ${destpath} -iname "${mFile##*/}" -exec printf '.' \;| wc -c

如果文件名与元字符相同则不返回。

谢谢

编辑:

“${mFile##*/}”在启动文件夹中具有输出文件名,不带路径。

echo "${mFile##*/}"-> goofy.mp3

示例在开始文件夹中我有:

goofy.mp3 - 米奇[1].avi - 唐纳德(2).mkv - scrooge.3gp

在目标文件夹中我有:

goofy.mp3 - 米奇[1].avi -donald(2).mkv -donald(1).mkv -donald(3).mkv -minnie.iso

我想要这个:

回显 pFile -> 3

与:

pFile= find ${destpath} -iname "${mFile##*/}" -exec printf '.' \;| wc -c

回显 pFile -> 2

与:

pFile= find ${destpath} -name "*[],&<>*?|\":'()[]*" -exec printf '.' \;| wc -c

回显 pFile -> 4

使用相同的文件名我的意思是:/path1/mickey[1].avi =/path2/mickey[1].avi

最佳答案

我不确定我是否理解您的 ${mFile##*/} 的预期语义,但是查看您的开始/目标文件夹示例,我创建了以下用例目录结构和下面的脚本来解决您的问题:

$ find root -type f | sort -t'/' -k3
root/dir2/donald(1).mkv
root/dir1/donald(2).mkv
root/dir2/donald(2).mkv
root/dir2/donald(3).mkv
root/dir1/goofy.mp3
root/dir2/goofy.mp3
root/dir1/mickey[1].avi
root/dir2/mickey[1].avi
root/dir2/minnie.iso
root/dir1/scrooge.3gp

现在,以下脚本(我使用 gfind 来表明您需要 GNU find 才能使其工作,但如果您使用的是 Linux,只需使用 find):

$ pFile=$(($(gfind root -type f -printf "%f\n" | wc -l) - $(gfind root -type f -printf "%f\n" | sort -u | wc -l)))
$ echo $pFile
3

我不确定这是否能解决您的问题,但它确实会打印您在提供的示例中期望的数字。

关于linux - Bash 查找和表达,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18049238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com