我使用以下Bash Shell脚本在当前目录下递归列出".txt"文件:
#!/bin/bash
for file in $( find . -type f -name "*.txt" )
do
echo $file
# Do something else.
done
Run Code Online (Sandbox Code Playgroud)
但是,当前目录下的某些".txt"文件名称中包含空格,例如"my testing.txt".列表已损坏,例如"my testing.txt"列为
my
testing.txt
Run Code Online (Sandbox Code Playgroud)
似乎"for"循环使用"空格"(空格,\n等)来分隔文件列表,但在我的情况下,我只想使用"\n"来分隔文件列表.
有什么办法可以修改这个脚本来达到这个目的.任何的想法.
提前致谢.
是的,find将文件名与NUL分开并用于read分隔NUL.这将成功迭代任何文件名,因为NUL不是文件名的有效字符.
#!/bin/bash
while IFS= read -r -d '' file; do
echo "$file"
# Do something else.
done < <(find . -type f -name "*.txt" -print0)
Run Code Online (Sandbox Code Playgroud)
或者,如果# do something else不是太复杂,你可以使用find的-exec选项,而不必担心适当的界定
如果你正在使用bash 4,只需使用glob:
#!/bin/bash
shopt -s globstar
for file in **/*.txt
do
if [[ ! -f "$file" ]]
then
continue
fi
echo "$file"
# Do something else.
done
Run Code Online (Sandbox Code Playgroud)
一定要引用,"$file"否则你会在其他地方遇到同样的问题.**如果已启用,将递归匹配文件和目录globstar.
| 归档时间: |
|
| 查看次数: |
18823 次 |
| 最近记录: |