我试图为这个命令创建别名
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
我使用此命令创建别名
alias renfiles="for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done"
但是它为错误的命令创建了别名:
$ which renfiles
alias renfiles='for file in *; do mv * * ; done'
我想要做的是创建一个重命名文件的别名,然后使用readlink列出它们,所以在下面做一个别名:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
for f in *; do readlink -f -- "$f"; done | sed -e "s/\/home\/ovh\/www/xxx.xxx.xxx.xxx/g"
答案 0 :(得分:4)
改为使用函数:
renfiles () {
for file in ./*; do
mv "$file" "$(echo "$file" | tr ' ' '_')"
done
}
您可以在bash
中更简单地将其写为
renfiles () {
for file in ./*; do
mv "$file" "${file// /_}"
done
}
答案 1 :(得分:0)
alias renfiles="for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done"
1)你有两个带引号的字符串(标记),$file
的扩展超出任何引号。这意味着当别名 set 时它将被展开,而不是在它被执行时展开。 (它也将从双引号内扩展)
2)反引号(以及saner $(...)
)从双引号内扩展,因此在设置别名时它们也会扩展。因此,如果在设置别名时$file
恰好包含*
,那么您就会得到您所看到的内容。
如果你想用别名做类似的事情,请在它周围使用单引号:
alias renfiles='for file in *; do echo mv "$file" $(echo $file | tr " " "_") ; done'
(或者更好的是,使用像@chepner这样的功能。)