我正在尝试编写一个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
---
注意路径如何重复自身之间的空格。为什么会这样?
另一个注意事项,为什么它会在//
路径中回来?这似乎不是一个问题,更让人感到好奇。
答案 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
。