Linux 为什么脚本不能识别文件扩展名?
我的剧本Linux 为什么脚本不能识别文件扩展名?,linux,bash,shell,Linux,Bash,Shell,我的剧本 #!/bin/bash cp *.ats /home/milenko/procmt mycd() { cd /home/milenko/procmt } mycd EXT=ats for i in *; do if [ "${i}" != "${i%.${EXT}}" ];then ./tsmp -ascii i fi done 但是 当我转到procmt目录并列出文件时 milenko@milenko-HP-Compaq-6830s:~/
#!/bin/bash
cp *.ats /home/milenko/procmt
mycd() {
cd /home/milenko/procmt
}
mycd
EXT=ats
for i in *; do
if [ "${i}" != "${i%.${EXT}}" ];then
./tsmp -ascii i
fi
done
但是
当我转到procmt目录并列出文件时
milenko@milenko-HP-Compaq-6830s:~/procmt$ ls *.ats
262_V01_C00_R000_TEx_BL_2048H.ats 262_V01_C00_R086_TEx_BL_4096H.ats 262_V01_C02_R000_THx_BL_2048H.ats
262_V01_C00_R000_TEx_BL_4096H.ats 262_V01_C01_R000_TEy_BL_2048H.ats 262_V01_C03_R000_THy_BL_2048H.ats
我的脚本有什么问题?如果我理解正确,这应该适合您:
dest='/home/milenko/procmt'
cp *.ats "$dest"
cd "$dest"
for i in *.ats; do
./tsmp -ascii "$i"
done
当您只对
.ats
文件感兴趣时,无需循环浏览所有文件。您的mycd
功能只是执行cd
,因此您也可以避免这种情况。如果我理解正确,这应该适用于您:
dest='/home/milenko/procmt'
cp *.ats "$dest"
cd "$dest"
for i in *.ats; do
./tsmp -ascii "$i"
done
当您只对
.ats
文件感兴趣时,无需循环浏览所有文件。您的mycd
函数只是执行cd
,因此您也可以避免这种情况。/tsmp-ascii
不是/tsmp-ascii“$i”
;您根本没有扩展变量,因此总是将它作为文件名i
i
不是以.ats
结尾的字符串,因此,这是您的错误。/tsmp-ascii
不是/tsmp-ascii“$i”
;您根本没有扩展变量,因此总是将它作为文件名i
i
不是以.ats
结尾的字符串,因此,这是您的错误。可能会在cd上退出,正如展示良好实践一样——如果由于任何原因未能cd到/home/milenko/procmt
,我们不想尝试运行一堆/tsmp
命令。@CharlesDuffy:是的,这是一个很好的观点,但我认为cp
将在cd
之前失败,如果用户对给定路径有权限问题。@anubhava,好的一点——尽管我注意到如果cp
也失败了,我们也不会退出。(这可能没问题——也许我们希望处理已经存在的文件,即使当前工作目录中没有与glob匹配的文件;相反,如果cd
失败,我看不到继续的情况是完全正确的)。可能|退出cd
,正如展示良好实践一样——如果由于任何原因未能cd到/home/milenko/procmt
,我们不想尝试运行一堆/tsmp
命令。@CharlesDuffy:是的,这是一个很好的观点,但我认为cp
将在cd
之前失败,如果用户对给定路径有权限问题。@anubhava,好的一点——尽管我注意到如果cp
也失败了,我们也不会退出。(这可能没问题——也许我们希望处理已经存在的文件,即使当前工作目录中没有与glob匹配的文件;相反,如果cd
失败,我看不到继续的情况是完全正确的)。