【问题标题】:Bash find and expressionBash 查找和表达
【发布时间】:2013-08-05 00:55:55
【问题描述】:

有什么方法可以让它工作吗?

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 - 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

与:

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

【问题讨论】:

  • 天哪!你的台词很漂亮,比如说,很有趣^^猜猜你给出一个输入和输出的例子会更容易。
  • 你说我需要pFie返回同名文件的数量。那将是find . -name "$my_name" | wc -l,但您对同名的定义似乎与我的不同。你能更彻底地解释一下同名是什么意思吗?
  • /path1/mickey[1].avi 和 /path2/mickey[1].avi 具有相同的文件名。我的意思是同名对不起我的英语。

标签: linux bash find


【解决方案1】:

我不确定我是否理解您对 ${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 表示您需要 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

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

【讨论】:

    猜你喜欢
    • 2013-07-07
    • 2022-01-13
    • 2012-11-30
    • 2011-03-31
    • 2011-08-05
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多