【发布时间】:2022-01-15 05:25:50
【问题描述】:
MacOSX Bash 终端:
find . -type f
很直接
find A -type f
其中 A 是一个目录同样简单
但是我有一个目录
A\ copy
(在系统上看起来像
A copy 当然)
我想将此作为起始目录进行搜索,为了方便起见,最好使用字符串变量。 find 无法处理目录名中的空格...我试过了
temp="A\ copy" ; find "$temp" -type f
temp="A copy" ; find "$temp" -type f
temp="A copy" ; find \""$temp"\" -type f
以及你能想到的几乎所有其他组合。我究竟做错了什么?如果这是一个新手问题,感谢您的帮助和道歉,但我确实尝试在这个问题上到处寻找。
这是完整的代码,所以你可以看到我在做什么
function find_missing_files_two_input_directories () {
if [[ -z "$1" ]] || [[ -z "$2" ]]; then echo "enter directory" ;
else
firstDirectory=$(absolutePath "$1")
secondDirectory=$(absolutePath "$2")
gfind "$firstDirectory" -type f -printf "%f\n" | sort > /tmp/compare_directory_1
gfind "$secondDirectory" -type f -printf "%f\n" | sort > /tmp/compare_directory_2
diff /tmp/compare_directory_1 /tmp/compare_directory_2 | grep -e ">" -e "<" | tee /tmp/tmp_compare_output
cat /tmp/tmp_compare_output | sed 's/<//' | sed 's/>//' > /tmp/compare_output
mkdir -p /tmp/compare_validation_copies
while IFS= read -r line ; do \
echo "$line"
gfind "$firstDirectory" -type f -name "$line"
#gfind "$firstDirectory" -type f -name "$line" -print -exec \gcp --backup="t" "{}" /tmp/compare_validation_copies
gfind "$secondDirectory" -type f -name "$line"
#gfind "$secondDirectory" -type f -name "$line" -print -exec \gcp --backup="t" "{}" /tmp/compare_validation_copies
done < /tmp/compare_output
\rm /tmp/compare_directory_1 /tmp/compare_directory_2
#open /tmp/compare_validation_copies
#open -a Terminal /tmp/compare_validation_copies
fi
}
【问题讨论】:
-
-f是 OSX 上的有效标志吗?在 gnu 上发现它不是 -
你有一个语法错误:你想改写
temp="A copy" ; find "$temp" -type f -
不要转义字符串中的空格和其他字符以阻止 shell 解释它们,只需引用您的字符串,即
'A copy',而不是A\ copy。见mywiki.wooledge.org/Quotes。 -
您的第二个变体
temp="A copy" ; find "$temp" -type f,Aserre 也说要使用它,对我有用。运行时得到什么输出?