read -r -p "Enter the filenames: " -a arr
for filenames in "${arr[@]}"; do
if [[ -e "${filenames}" ]]; then
echo "${filenames} file exists (no override)"
else
cp -n ~/Documents/library/normal.py "${filenames}"
fi
done
假设,我B.py D.py
在一个文件夹中。
当我在同一文件夹中运行此脚本并写入A.py B.py C.py D.py
(未定义数量的输入)
命名的文件时A.py C.py
,已成功复制。
而对于B.py D.py
,则分别显示B.py file exists (no override)
和D.py file exists (not override)
。
我想将元素存储which did worked
在which didn't work
与主数组不同的数组中${arr[@]}
arr=('A.py' 'B.py' 'C.py' 'D.py')
didworked=('A.py' 'C.py')
notworked=('B.py' 'D.py')
我怎样才能做到这一点?有什么建议,请提出来。
答案1
只需将文件名附加到相应数组的正确位置即可:
#!/bin/bash
files=('A.py' 'B.py' 'C.py' 'D.py')
files_err=()
files_ok=()
for f in "${files[@]}"; do
if [[ -e "$f" ]]; then
echo "$f file exists (no override)"
files_err+=("$f")
else
if cp -n ~/Documents/library/normal.py "$f"; then
files_ok+=("$f")
else
# copy failed, cp should have printed an error message
files_err+=("$f")
fi
fi
done
(我不会filenames
在 for 中用作循环变量,它只是一个文件名(一次),而不是很多。)