我是脚本概念的新手。我需要将filename.sh.x
等目录中的多个文件重命名为filename.sh
首先,我尝试在特定目录中获取文件名..所以我按照下面的脚本代码
for entry in PathToThedirectory/*sh.x
do
echo $entry
done
&安培;上面的代码列出了所有带有完整路径的文件名..
但我期望的o / p是:单独获取文件名,如abc.sh.x
,
这样我就可以继续使用拆分字符串机制来执行重命名
操作轻松......
帮我解决这个问题......提前致谢
答案 0 :(得分:2)
尝试遵循OP建议的第一种方法:
for i in my/path/*.py.x
do
basename=$(basename "$i")
mv my/path/"$basename" my/path/"${basename%.*}"
done
也许,你可以简化它:
for i in my/path/*.py.x
do
mv "$i" "${i%.*}";
done
有关此类操作的文档(参数扩展):https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
特别是:
$ {parameter%word}:扩展单词以生成模式,就像在文件名扩展中一样。如果模式匹配参数展开值的尾部,那么展开的结果是具有最短匹配模式('%'大小写)或最长匹配模式('%%'大小写)的参数值删除
所以,${i%.*}
表示:
$i
.*
(.
为文字字符)答案 1 :(得分:1)
查看prename
(与ubuntu上的perl软件包一起安装)。
然后你可以做类似的事情:
prename 's/\.x$//' *.sh.x
答案 2 :(得分:0)
在ksh中你可以这样做:
for $file in $(ls $path)
do
new_file=$(basename $path/$file .x)
mv ${path}/${file} ${path}/${new_file}
done
答案 3 :(得分:0)
从根目录运行此重命名命令应该有效:
rename 's/\.sh\.x$/.sh/' *.sh.x
答案 4 :(得分:0)
这应该可以解决问题:
for file in *.sh.x;
do
mv "$file " "${file /.sh.x}";
done
答案 5 :(得分:-1)
for ls -la /path|grep -v ^d|awk '{print $NF}'
做
echo“basename $i
”
完成了
find / path -type f -exec basename {} \;