42

有没有办法批量重命名子目录中的文件?

例如:

重命名*.html*.htm包含目录和子目录的文件夹。

4

10 回答 10

90

Windows 命令提示符:(如果在批处理文件中,请将 %x 更改为 %%x)

for /r %x in (*.html) do ren "%x" *.htm

这也适用于重命名文件的中间

for /r %x in (website*.html) do ren "%x" site*.htm
于 2008-10-29T05:14:39.173 回答
6
find . -regex ".*html$" | while read line;
 do 
    A=`basename ${line} | sed 's/html$/htm/g'`;
    B=`dirname ${line}`;
    mv ${line} "${B}/${A}";
 done
于 2008-10-29T05:15:11.140 回答
6

在蟒蛇

import os

target_dir = "."

for path, dirs, files in os.walk(target_dir):
    for file in files:
        filename, ext = os.path.splitext(file)
        new_file = filename + ".htm"

        if ext == '.html':
            old_filepath = os.path.join(path, file)
            new_filepath = os.path.join(path, new_file)
            os.rename(old_filepath, new_filepath)
于 2008-10-29T05:17:27.763 回答
4

在 Bash 中,您可以执行以下操作:

for x in $(find . -name \*.html); do
  mv $x $(echo "$x" | sed 's/\.html$/.htm/')
done
于 2008-10-29T05:08:53.540 回答
3

如果你有 forfiles(我认为它与 Windows XP 和 2003 以及更新的东西一起提供)你可以运行:

forfiles /S /M *.HTM /C "cmd /c ren @file *.HTML"
于 2009-11-23T13:59:13.987 回答
2

我确信有一种更优雅的方式,但这是我脑海中突然出现的第一件事:

for f in $(find . -type f -name '*.html'); do 
    mv $f $(echo "$f" | sed 's/html$/htm/')
done
于 2008-10-29T05:10:43.160 回答
2
In bash use command rename :)

 rename 's/\.htm$/.html/' *.htm

 # or

 find . -name '*.txt' -print0 | xargs -0 rename 's/.txt$/.xml/'

 #Obs1: Above I use regex \. --> literal '.'  and  $ --> end of line
 #Obs2: Use find -maxdepht 'value' for determine how recursive is
 #Obs3: Use -print0 to avoid 'names spaces asdfa' crash!
于 2008-10-29T19:43:09.047 回答
1

在 Linux 上,您可以使用“ rename ”命令批量重命名文件。

于 2008-10-29T06:11:29.217 回答
0

Linux 上的 AWK。对于第一个目录,这是您的答案...通过在 dir_path 上递归调用 awk 进行推断,也许可以通过编写另一个 awk 来将这个确切的 awk 写在下面...等等。

ls dir_path/. | awk -F"." '{print "mv file_name/"$0" dir_path/"$1".new_extension"}' |csh
于 2008-10-29T07:07:20.710 回答
0

在 Unix 上,您可以使用rnm

rnm -rs '/\.html$/.htm/' -fo -dp -1 *

或者

rnm -ns '/n/.htm' -ss '\.html$' -fo -dp -1 *

解释:

  1. -ns: 名称字符串(新名称)。/n/是一个名称字符串规则,它扩展为不带扩展名的文件名。
  2. -ss:搜索字符串(正则表达式)。搜索匹配的文件。
  3. -rs: 替换表单的字符串/search_regex/replace_part/modifier
  4. -fo: 仅文件模式
  5. -dp: 目录深度(-1 表示无限制)。
于 2016-05-07T07:35:25.840 回答