我正在使用 bash shell。我有这个代表文件路径的数组
MY_FILES=(/path/to/file1 /tmp/abc.txt /tmp/test.sh /path/to/file2 /path/to/file3 /tmp/abc.txt)
如何形成一个新的元素数组,其中的路径实际存在于我的文件系统上?
答案1
MY_FILES=(/path/to/file1 /tmp/abc.txt /tmp/test.sh /path/to/file2 /path/to/file3 /tmp/abc.txt)
existing=()
for pathname in "${MY_FILES[@]}"; do
if [ -e "$pathname" ]; then
existing+=( "$pathname" )
fi
done
上面创建了一个新数组 ,其中包含该数组中与文件系统中现有名称相对应的existing
条目。MY_FILES
它通过迭代数组中的条目,使用测试依次测试每个元素来实现这一点-e
,即真的如果给定的路径名存在。如果当前路径名存在,则将其作为新元素附加到数组末尾existing
。
如果您还想确保每个名称都是常规文件,将-e
测试改为-f
测试。