我有一些这样的文件:
database1-backup-01-01-2011.sql
database2-backup-01-01-2011.sql
Run Code Online (Sandbox Code Playgroud)
...等等。我想重命名它们以添加 AM,如下所示:
database1-backup-01-01-2011-AM.sql
database2-backup-01-01-2011-AM.sql
Run Code Online (Sandbox Code Playgroud)
从 bash shell 执行此操作的最简洁方法是什么?
chr*_*ish 20
另外一个选项:
for i in *.sql ; do
mv -v $i ${i%.sql}-AM.sql
done
Run Code Online (Sandbox Code Playgroud)
这将遍历所有 .sql 文件并将它们重命名为以 -AM.sql 结尾。
普罗蒂普:使用$(command)的,而不是`command`在脚本(和命令行),它使引号和转义噩梦的少。
试试这个小脚本:
#!/bin/sh
FILES=`ls *.sql`
for FILE in ${FILES}
{
BASE=`basename ${FILE} .sql`
mv ${FILE} ${BASE}-AM.sql
}
Run Code Online (Sandbox Code Playgroud)
我只是从内存中输入,所以如果它 100% 不起作用,请不要怪我(即,先备份您的数据;))
这个怎么运作:
将所有文件收集到一个变量中(您可以将其放在 for 中,但我希望使内容易于阅读):
FILES=`ls *.sql`
Run Code Online (Sandbox Code Playgroud)
循环遍历每个文件:
for FILE in ${FILES} { ... }
Run Code Online (Sandbox Code Playgroud)
获取不带 .sql 的文件名:
BASE=`basename ${FILE} .sql`
Run Code Online (Sandbox Code Playgroud)
重命名文件,将 -AM.sql 添加到基本名称:
mv ${FILE} ${BASE}-AM.sql
Run Code Online (Sandbox Code Playgroud)
rename 's/\.sql$/-AM$&/' *.sql
Run Code Online (Sandbox Code Playgroud)
使用以下util-linux-ng版本rename(但仅当“.sql”仅出现在文件名末尾时):
rename .sql -AM.sql *.sql
Run Code Online (Sandbox Code Playgroud)
使用mmv:
mmv '*.sql' '#1-AM.sql'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17682 次 |
| 最近记录: |