我有一堆像这样的文件名
name-id.ext
我希望在文件中交换id和name,以便命名为
id-name.ext
这似乎有效,唯一的问题是它也会交换文件扩展
for file in *; do echo "${file#*-}-${file%-*}"; done
答案 0 :(得分:3)
这可以通过以下方式实现:
正则表达式组,用于检测要交换的文件名的两个部分:
'^(.*)-(.*)\.ext'
sed
将第一部分与第二部分交换:
sed 's/^\(.*\)-\(.*\)\.ext$/\2-\1\.ext/'
echo
将旧文件名传输到sed:echo $file | sed 's/^\(.*\)-\(.*\)\.ext$/\2-\1\.ext/'
newname=$(echo $file | sed 's/^\(.*\)-\(.*\)\.ext$/\2-\1\.ext/')
mv
可以使用上一个点中的块作为新名称:mv $file $newname
整个事情可以包含在循环中以遍历文件:
for file in *ext; do
newname=$(echo $file | sed 's/^\(.*\)-\(.*\)\.ext$/\2-\1\.ext/');
mv $file $newname;
done;