我正在尝试编写一个脚本,首先测试 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
然后它开始在匹配的名称中查找第一个常规文件或到常规文件的符号链接(代码假设*.csv
glob可能扩展到目录名称等)。如果找到常规文件或该文件的符号链接,则会将该文件重命名为listing.txt
.
在zsh
外壳中:
mv -- *.csv(-.[1]) listing.txt
这对通配模式使用了通配符修饰符*.csv
,该修饰符返回与该模式匹配的第一个常规文件或符号链接。