【发布时间】:2017-12-18 06:20:40
【问题描述】:
请注意,我已经阅读过类似 For loop for files in multiple folders - bash shell 的条目,但他们要求的内容完全不同。
我想按存在于两个目录中的任何一个目录中的排序顺序遍历文件名。文件中可能包含空格。
假设我有:
1/
a
a c b
b
c
2/
a
d
我想循环遍历:'a'、'a c b'、'b'、'c'、'd'。
我已尝试执行以下操作:
for fname in $((ls -1 -f -A "${dir1}"; ls -1 -f -A "${dir2}")|sort --unique); do
echo "testing ${fname}"
done
结果是
testing .
testing ..
testing a
testing a
testing c
testing b
testing b
testing c
testing d
无论出于何种原因,我都会得到“。”和“..”条目,我试图用-A 排除这些条目,并且文件“a c b”被分解为三个字符串。
我试图通过将--zero 添加到sort 命令来解决它,但没有任何改变;通过引用整个 $(ls...|sort) 部分,并导致进入 for 循环的单个条目,该条目已接收整个字符串,其中包含多行,每行包含文件名。
【问题讨论】:
-
for fname in 1/* 2/*; do ...; done? -
请将您想要的输出添加到您的问题中。
-
嗨,实际上所需的输出已经存在:“我想循环遍历:'a', 'a c b', 'b', 'c', 'd'。”跨度>
标签: bash for-loop whitespace