【发布时间】:2016-05-18 16:31:19
【问题描述】:
我需要比较目录中可用的文件,只有当我在文件列表中单独提及文件名(file1 file2 file3 file4)时,以下代码才能正常工作
#!/bin/bash
filelist=(file1 file2 file3 file4)
# Outer for loop
for (( i=0; i<${#filelist[@]} ; i+=1 )) ; do
# Inner for loop
for (( j=i+1; j<${#filelist[@]} ; j+=1 )) ; do
echo "Unique between ${filelist[i]}" "${filelist[j]}" > unique${filelist[i]}${filelist[j]}.txt
echo -e "Unique in ${filelist[i]}" >> unique${filelist[i]}${filelist[j]}.txt
# Will produce unique lines in 'file i' when comparing 'file i' and 'file j'
join -v 1 <(sort ${filelist[i]}) <(sort ${filelist[j]}) >> unique${filelist[i]}${filelist[j]}.txt
echo -e "Unique in ${filelist[j]}" >> unique${filelist[i]}${filelist[j]}.txt
# Will produce unique lines in 'file j' when comparing 'file i' and 'file j'
join -v 2 <(sort ${filelist[i]}) <(sort ${filelist[j]}) >> unique${filelist[i]}${filelist[j]}.txt
done
done
但我真正想要的是将目录中可用的文件直接分配给文件列表。请问有什么可行的解决方案吗?
【问题讨论】:
-
如果文件名有空格,您接受的答案将不会给出正确的结果。你可以验证它。只有我的答案是正确的。
-
验证:mkdir -p /tmp/test && cd test && touch List\ s && filelist=($(/bin/ls)) && shuf -e "${filelist[@]}"
-
您将看到 2 个文件用于使用 ls 接受答案,1 个文件用于我。后者是正确的行为。
标签: linux shell unix directory