she*_*har 1 linux unix batch command-line
我有数千个没有特定扩展名的文件。我需要做的是在文件名中搜索字符串并替换为其他字符串,然后进一步搜索第二个字符串并替换为任何其他字符串,依此类推。即:我有多个字符串可以替换为其他多个字符串。它可能是这样的:
我目前正在使用 Excel 宏获取 Excel 中的文件名,然后在一列中保留原始名称,并替换另一列中复制的内容中所需的名称。然后我为其创建一个批处理文件。喜欢:
rename Path\OriginalName1 NewName1
rename Path\OriginalName2 NewName2
Run Code Online (Sandbox Code Playgroud)
上述过程的问题在于,由于文件较多,因此需要花费大量时间。由于我使用的是 Excel 2003,行数也有限制。我需要一个批量脚本,例如:
replacestr abc with def
replacestr pqr with xyz
Run Code Online (Sandbox Code Playgroud)
在单个目录中。在unix脚本中做会更好吗?
小智 5
如果您可以使用 Bash,那么以下脚本应该可以执行您想要的操作:
#!/bin/bash
(( $# != 2 )) && exit 1
for f in *; do
newf="${f//$1/$2}"
if [[ $f != $newf ]]; then
mv "$f" "$newf"
fi
done
Run Code Online (Sandbox Code Playgroud)
它尝试用新字符串替换文件名,如果结果文件名与原始文件名不匹配,则它将文件重命名为结果文件名。
用法,如果保存为replacestr
并给定要执行的模式:
$ ./replacestr abc def
Run Code Online (Sandbox Code Playgroud)
它将尝试重命名所有内容。您可以使用[[ ! -f $f ]]
跳过非文件。~/.bashrc
如果您经常需要,您也可以将其包装在函数中并从您那里获取它。