我需要像这样重命名文件名
transform.php?dappName=Test&transformer=YAML&v_id=XXXXX
就这个
XXXXX.txt
我该怎么做?
我知道我需要多个mv
命令,因为它们至少有 25000 个文件。
最简单的解决方案是使用“mmv”
你可以写:
mmv "long_name*.txt" "short_#1.txt"
其中“#1”被第一个通配符匹配的任何内容替换。类似地,#2 被第二个替换,依此类推。
所以你做类似的事情
mmv "index*_type*.txt" "t#2_i#1.txt"
将 index1_type9.txt 重命名为 t9_i1.txt
mmv 在许多 Linux 发行版中不是标准的,但在网上很容易找到。
如果您使用的是 zsh,您也可以这样做:
autoload zmv
zmv 'transform.php?dappName=Test&transformer=YAML&v_id=(*)' '$1.txt'
您编写了一个相当简单的 shell 脚本,其中最棘手的部分是修改名称。
脚本的大纲很简单(此处为 bash 语法):
for i in 'transform.php?dappName=Test&transformer=YAML&v_id='*
do
mv $i <modified name>
done
修改名称有很多选择。我认为最简单的可能是 awk 单行
`echo $i | awk -F'=' '{print $4}'`
所以...
for i in 'transform.php?dappName=Test&transformer=YAML&v_id='*
do
mv $i `echo $i | awk -F'=' '{print $4}'`.txt
done
好的,如下所述,这不一定适用于足够大的文件列表;* 将超出命令行长度限制。所以,然后你使用:
$ find . -name 'transform.php?dappName=Test&transformer=YAML&v_id=*' -prune -print |
while read
do
mv $reply `echo $reply | awk -F'=' '{print $4}'`.txt
done
尝试重命名命令
或者您可以将 ls 的结果通过管道传输到 perl 正则表达式中。
您可以使用任何您想要转换的名称(perl、sed、awk 等)。我将使用 python 单线:
for file in 'transform.php?dappName=Test&transformer=YAML&v_id='*; do
mv $file `echo $file | python -c "print raw_input().split('=')[-1]"`.txt;
done
这是完全用 Python 编写的相同脚本:
import glob, os
PATTERN="transform.php?dappName=Test&transformer=YAML&v_id=*"
for filename in glob.iglob(PATTERN):
newname = filename.split('=')[-1] + ".txt"
print filename, '==>', newname
os.rename(filename, newname)
旁注:您可以更轻松地保存具有正确名称的页面,同时抓住它们......
find -name '*v_id=*' | perl -lne'rename($_, qq($1.txt)) if /v_id=(\S+)/'
vimv允许您使用 Vim 的文本编辑功能重命名多个文件。
输入vimv
会打开一个列出所有文件的 Vim 窗口,您可以进行模式匹配、视觉选择等来编辑名称。退出 Vim 后,文件将被重命名。
[免责声明:我是该工具的作者]
我会使用ren-regexp,这是一个 Perl 脚本,可让您非常轻松地批量重命名文件。
21:25:11 $ ls
transform.php?dappName=Test&transformer=YAML&v_id=12345
21:25:12 $ ren-regexp 's/transform.php.*v_id=(\d+)/$1.txt/' transform.php*
transform.php?dappName=Test&transformer=YAML&v_id=12345
1 12345.txt
21:26:33 $ ls
12345.txt
这个重命名器命令会这样做:
$ renamer --regex --find 'transform.php?dappName=Test&transformer=YAML&v_id=(\w+)' --replace '$1.txt' *
这也应该有效:
prfx='transform.php?dappName=Test&transformer=YAML&v_id='
ls $prfx* | sed s/$prfx// | xargs -Ipsx mv "$prfx"psx psx
好的,您需要能够为此运行 Windows 二进制文件。
但是,如果您可以运行Total Commander,请执行以下操作:
选择所有带 * 的文件,然后按 ctrl-M
在搜索字段中,粘贴“transform.php?dappName=Test&transformer=YAML&v_id="
(将替换留空)
按开始
没有比这更简单的了。您还可以通过此对话框使用正则表达式重命名,并且您会看到文件将如何重命名的实时预览。