我需要重命名这样的文件名
transform.php?dappName=Test&transformer=YAML&v_id=XXXXX
就这一点
XXXXX.txt
我该怎么做?
我知道我需要多个mv
命令,因为他们至less有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
在许多Linux发行版中,mmv并不是标准配置,但很容易在网上找到。
如果你使用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
这也应该工作:
prfx = 'transform.php?dappName =测试与变压器= YAML&v_id ='
ls $ prfx * | sed s / $ prfx // | xargs -Ipsx mv“$ prfx”psx psx
这个重命名命令会做到这一点:
$ renamer --regex --find 'transform.php?dappName=Test&transformer=YAML&v_id=(\w+)' --replace '$1.txt' *
好吧,你需要能够为此运行一个Windows二进制文件。
但是如果你可以运行总指挥官 ,那么这样做:
用*选择所有文件,然后按ctrl-M
在“ 搜索”字段中,粘贴“transform.php?dappName = Test&transformer = YAML&v_id =”
(留空置换 )
按开始
这并没有比这更简单。 您还可以通过此对话框使用正则表达式进行重命名,并且可以实时预览您的文件将如何重命名。