获得重复输出

时间:2015-05-07 18:18:40

标签: bash scripting sh

我正在尝试编写一个bash脚本,该脚本在一个目录中查找文件,并将其替换为源目录中的同名文件。当我运行find命令时,似乎是将$path设置为两次

 for f in build-res/$1/*.png; do
     file="$(basename "$f")"
     echo "Looking for $file in $TMP"
     path="$(find $TMP -type f -name "$file")"
     if [[ -z $path ]]; then
             echo "Could not find $file in $TMP"
      else
             echo "Replacing file at $path with $file"
             echo "__path__"
             echo $path
             echo "---"
      fi
 done

运行此循环的一次迭代输出类似

的内容
Replacing file at tmp/trx//images/background/background_iphone5.png
tmp/trx//images/background_iphone5.png with background_iphone5.png
__path__
tmp/trx//images/background/background_iphone5.png tmp/trx//images/background_iphone5.png
---

注意路径如何重复自身之间的空格。为什么会这样?

另一个注意事项,为什么它会在//路径中回来?这似乎不是一个问题,更让人感到好奇。

1 个答案:

答案 0 :(得分:4)

如果你仔细观察,这是不一样的道路:

tmp/trx//images/background/background_iphone5.png tmp/trx//images/background_iphone5.png

- >

tmp/trx//images/background/background_iphone5.png 
tmp/trx//images/background_iphone5.png

这是find的结果输出,它在/tmp的不同子目录中找到2个具有相同名称的文件。

仅供参考,如果您想控制find可以深入到子目录中的深度,那么可以选择:

  

-maxdepth levels

     

在命令行参数下面的目录的大多数级别(非负整数)下降。 -maxdepth 0表示仅将测试和操作应用于命令行参数。

或者,如果您只需要一个结果,则可以使用

  

-QUIT

     

立即退出。不会继续运行子进程,但不会处理命令行上指定的更多路径。例如,find /tmp/foo /tmp/bar -print -quit将仅打印/tmp/foo