关于查找和重命名 CSV 文件的脚本问题

关于查找和重命名 CSV 文件的脚本问题

我正在尝试编写一个脚本,首先测试 CSV 文件是否存在。如果找到,请将其重命名为listing.txt。

这就是我所拥有的,但它不起作用。

if [ -f "*.csv" ];
   then
   cp *.csv listing.txt
fi

答案1

*.csv您现有的代码测试是否存在名为(字面意思)的文件。这就是它不起作用的原因。这样做是因为*位于双引号内。

[ -f *.csv ]如果有多个文件与该模式匹配,则使用将无法按预期工作。如果有多个文件匹配*.csv,该cp命令将另外无法正常工作,除非listing.txt是目录的名称。

重命名第一的*.cvs在当前目录中匹配文件名通配模式的文件中,执行以下操作:

#!/bin/sh

set -- *.csv

while [ "$#" -gt 0 ] && [ ! -f "$1" ]; do
    shift
done

if [ -f "$1" ]; then
    mv -- "$1" listing.txt
fi

这首先设置位置参数,$1,等,当前目录中$2匹配的所有名称。*.csv然后它开始在匹配的名称中查找第一个常规文件或到常规文件的符号链接(代码假设*.csvglob可能扩展到目录名称等)。如果找到常规文件或该文件的符号链接,则会将该文件重命名为listing.txt.

zsh外壳中:

mv -- *.csv(-.[1]) listing.txt

这对通配模式使用了通配符修饰符*.csv,该修饰符返回与该模式匹配的第一个常规文件或符号链接。

相关内容