【问题标题】:bash find where starting directory has a spacebash 查找起始目录有空格的位置
【发布时间】: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 也说要使用它,对我有用。运行时得到什么输出?

标签: bash find spaces


【解决方案1】:
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
echo "next bit"
cat /tmp/tmp_compare_output | sed 's/<//' | sed 's/>//' > /tmp/compare_output
mkdir -p /tmp/compare_validation_copies

while IFS= read -r line  ; do \


gfind  "$firstDirectory" -type f -name $line -exec \gcp --backup="t" "{}" /tmp/compare_validation_copies \;
gfind  "$secondDirectory" -type f -name $line -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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 2011-02-18
    相关资源
    最近更新 更多