bash脚本请求(或鱼脚本)。我有一堆文件,如:
name - lastname.info
names - lastnames.info
name & name - lastname & lastname.info
但我想将所有这些改为:
lastname - name.info
lastnames - names.info
lastname & lastname - name & name - lastname & lastname.info
答案 0 :(得分:2)
根据您的示例数据,您有" - "
作为分隔符,所以
for file in *; do
ext=${file##*.}
no_ext=${file%.*}
name=${no_ext% - *}
lastname=${no_ext##* - }
mv "$file" "$lastname - $name.$ext"
done
有关血腥的详细信息,请参阅http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion
答案 1 :(得分:1)
您可以使用for循环遍历cwd中的所有文件,然后使用cut实用程序根据' - '分隔符解析文件名以获取名字和姓氏(然后我-cut解析文件扩展名),然后使用tr删除前导/尾随空格。最后连接,你有了新的文件名:
for file in *
do
fname=`echo $file | cut -d '-' -f 1 | tr -d ' '`
lname=`echo $file | cut -d '-' -f 2 | cut -d '.' -f 1 | tr -d ' '`
newname=$lname' - '$fname.info
echo $newname
done
答案 2 :(得分:-1)
假设您的所有文件都在一个目录中:
for f in lastname*
do
mv $f `echo $f | sed 's/lastname/name/'`
done
如果您的文件位于层次结构中的任何位置,则必须使用find
命令,但基本想法仍然存在。