0

有什么办法可以使这个工作吗?

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

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

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

如果有与元字符相同的文件名,它不会返回。

谢谢

编辑:

"${mFile##*/}" 在开始文件夹中作为输出文件名,没有路径。

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

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

goofy.mp3 - mickey[1].avi - donald(2).mkv - scrooge.3gp

在目标文件夹中,我有:

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

我要这个:

回声 pFile -> 3

和:

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

回声 pFile -> 2

和:

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

回声 pFile -> 4

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

4

1 回答 1

0

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

$ 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指出你需要 GNUfind才能工作,但如果你在 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

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

于 2013-08-20T20:34:01.473 回答