我创建了一个脚本,该脚本将检查文件是否在“下载”文件夹中。然后它将文件复制到所需的位置,然后将其重命名为其他名称。
我这样做是:
if [ -f /home/$username/Downloads/Framework\ Code\ Note\ $1.txt ]; then
cp /home/$username/Downloads/Framework\ Code\ Note\ $1.txt /home/$username/Documents/TASKS/Framework/$3/$2/
mv Framework\ Code\ Note\ $1.odt Framework\ Code\ Note\ $2.odt
else
echo "The file does not exist yet Download the latest notes from your email"
fi
问题是我通常使用相同文件名的不同版本,并且需要从电子邮件中下载最新文件。因此名称分别为Framework Code Note 10.txt,Framework Code Note 10(1).txt Framework Code Note 10(2).txt等...
我如何修改它以仅从“下载”文件夹中提取最新的Notes(如果可能)?
要获取文件的最新版本(即Framework Code Note 10(X).txt
X最大),可以使用以下命令:
IFS=$'\n' MYARRAY=($( printf "%s\n" "/path/to/downloads/Framework Code Note $1"*.txt | sort -nr -t '(' -k 2 ))
cp "${MYARRAY[0]}" /my/destination/folder
分解时:
printf "%s\n" "/path/to/downloads/Framework Code Note $1"*.txt
在下载目录中找到所有以“框架代码注释Y”开头的文件,其中Y是的值$1
。这样一来,Framework Code Note 10(X).txt
和Framework Code Note 10.txt
匹配。
sort -nr -t '(' -k 2
-n
考虑到第二列(k 2
),以数字顺序()对生成的文件进行排序。每列的分隔符为'('(-t '('
),然后反转结果,以便第一个结果具有最高的数字(-r
)
命令的输出存储在中$MYARRAY
。然后,在读取数组的第一个元素时提取最高版本号
IFS=$'\n':
\n
仅针对此行将“内部字段分隔符”设置为。bash使用此变量来了解如何分隔参数,其默认值为\n\t
。这意味着当我们将分配给时$MYARRAY
,如果名称包含空格,则将其视为分隔符(即,如果只有Framework Code Note 10.txt
,Framework
将存储到MYARRAY[0]
,Code
到MYARRAY[1]
等)。由于归因是内联完成的,$IFS
因此执行后会恢复为默认值
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句