在bash中查找不在循环中搜索变量
我试图在项目的目录中找到.csv文件名(全部在一列中),以确定项目中存在哪些文件。我将把这些文件的目录输出到另一个csv,但在使用此循环时找不到返回的任何内容。这些文件通常有下划线、连字符和句点,但没有其他特殊字符或空格在bash中查找不在循环中搜索变量,bash,Bash,我试图在项目的目录中找到.csv文件名(全部在一列中),以确定项目中存在哪些文件。我将把这些文件的目录输出到另一个csv,但在使用此循环时找不到返回的任何内容。这些文件通常有下划线、连字符和句点,但没有其他特殊字符或空格 #!/bin/bash while read file; do echo $file find "/Users/myname/Documents/project/software 6.2.0.1/webclient" -name "$file" -exec ec
#!/bin/bash
while read file; do
echo $file
find "/Users/myname/Documents/project/software 6.2.0.1/webclient" -name "$file" -exec echo '{}' \;
done < test.csv
运行bash-x./script.sh之后,我的控制台显示:
+ read file
+ echo $'Organization_createLocation.uim\r'
Organization_createLocation.uim
+ find '/Users/myname/Documents/project/software 6.2.0.1/webclient' -name
$'Organization_createLocation.uim\r' -exec echo '{}' ';'`
对于.csv中的每个项目,每行末尾都有回车符bash-x./myscript.sh
帮助我找到回车符,并且dos2unix
解决了我的问题。它现在运行正常。什么是echo“$file==”
输出?(引号更为重要,但是==
表明如果在值的末尾有回车符。)您可以发布test.csv的示例和脚本的输出吗?也许$file中有一个NL字符?顺便说一句,-exec echo'{}'
有些毫无意义,因为它(打算)相当于-print
,如果不提供其他操作,它本身就是假定的。运行bash-x yourscript
来启用调试日志记录会很有帮助,因为它将为您提供正在运行的确切的find
命令,您可以将其与工作命令进行比较。@Battlebite这意味着file
的值类似于foo\r
,而不是foo
。CSV文件具有DOS行结尾,并且bash
将行结尾的\r
部分视为常规字符。
+ read file
+ echo $'Organization_createLocation.uim\r'
Organization_createLocation.uim
+ find '/Users/myname/Documents/project/software 6.2.0.1/webclient' -name
$'Organization_createLocation.uim\r' -exec echo '{}' ';'`