我正在编写一个小脚本,该脚本输出目录中的重复文件列表,即。 XXX.jpg
和XXX (1).jpg
对。我想将此脚本的输出用作命令的参数,即ql
(快速查找),以便查看所有此类图像(以确认它们确实是重复的图像,或只是文件名)。例如,我可以执行“ ql (”),这将允许我浏览所有文件“ XXX(1).jpg”;但是我想在列表中也包含原始文件“ XXX”。 jpg”文件。
到目前为止,这是我的脚本:
dups=()
for file in *\(*; do
dups+=( "${file}" )
breakdown=( $file )
dupfile="${breakdown[0]}.jpg"
if [ -e "$dupfile" ]; then
dups+=( "$dupfile" )
fi
done
echo ${dups[@]}
就可以构建所需文件名的数组了。但是,当涉及到诸如ql $(./printdups.sh)
之类的命令时,该命令会被文件名和空格所混淆。它将尝试打开“ XXX”作为文件,然后打开“(1).jpg”作为另一个文件。所以问题是,我如何回显此数组,以便传递给我的命令能够识别带有空格的文件名?
我尝试将第3行更改为:
dups+=( "'$file'" )
并且:
dups+=( "${file/ /\ }" )
都无济于事。
答案 0 :(得分:1)
您不能将数组从一个进程传递到另一个进程。您要做的只是将空格分隔的文件名序列写入标准输出,并且ql $(./printdups.sh)
中未引用的命令替换失败,原因与您首先需要数组的原因相同:单词拆分不能区分文件名中的空格和文件名之间的空格。
我建议定义一个 function 而不是一个脚本,并让该函数填充一个全局数组,您可以在调用该函数后直接访问它。
get_dups () {
dups=()
for file in *\(*; do
dups+=( "$file" )
read -a breakdown <<< "$file" # safer way to split the name into parts
dupfile="${breakdown[0]}.jpg"
if [ -e "$dupfile" ]; then
dups+=( "$dupfile" )
fi
done
}
get_dups
ql "${dups[@]}"