有没有办法从 shell 递归地更改文件名?

有没有办法从 shell 递归地更改文件名?

必须执行 wget 从 Wordpress 站点获取文件。它用 [,random-string-text.pagespeed.blah] 保存了所有 JPG。

有没有办法递归地重命名这些 JPG,删除逗号后的所有文本?

答案1

这是一个 Python 脚本,应该可以完成您想要的操作:

#!/usr/bin/env python2
# -*- coding: ascii -*-
"""remove_extensions.py

Remove meta-data filename extensions added by wget.
"""

import sys
import os
import re

# Define a regular expression to match the file-extension pattern
regex = r'^(.*),random-string-text.pagespeed.blah$'

for current_path, subdirectories, files in os.walk(sys.argv[1]):
    for filename in files:
        match = re.match(regex, filename)
        if match:
            newname = match.groups()[0]
            newpath = os.path.join(current_path, newname)
            oldpath = os.path.join(current_path, filename)
            os.rename(oldpath, newpath)

您必须稍微修改正则表达式以匹配您的实际文件名模式(或更新您的问题以说明它们是什么)。

这是一个测试,说明了脚本的运行情况。

创建一些目录:

mkdir /tmp/dir1
mkdir /tmp/dir1/dir2
mkdir /tmp/dir3

用一些文件填充它们:

touch /tmp/dir1/file{01..03}.jpg,random-string-text.pagespeed.blah
touch /tmp/dir1/dir2/file{04..06}.jpg,random-string-text.pagespeed.blah
touch /tmp/dir3/file{07..10}.jpg,random-string-text.pagespeed.blah

验证我们做了什么:

user@host:~$ tree /tmp

/tmp/
├── dir1
│   ├── dir2
│   │   ├── file04.jpg,random-string-text.pagespeed.blah
│   │   ├── file05.jpg,random-string-text.pagespeed.blah
│   │   └── file06.jpg,random-string-text.pagespeed.blah
│   ├── file01.jpg,random-string-text.pagespeed.blah
│   ├── file02.jpg,random-string-text.pagespeed.blah
│   └── file03.jpg,random-string-text.pagespeed.blah
└── dir3
    ├── file07.jpg,random-string-text.pagespeed.blah
    ├── file08.jpg,random-string-text.pagespeed.blah
    ├── file09.jpg,random-string-text.pagespeed.blah
    └── file10.jpg,random-string-text.pagespeed.blah

3 directories, 10 files

现在运行脚本:

python remove_extensions.py /tmp/

最后检查它是否达到了预期的效果:

user@host:~$ tree /tmp/
/tmp/
├── dir1
│   ├── dir2
│   │   ├── file04.jpg
│   │   ├── file05.jpg
│   │   └── file06.jpg
│   ├── file01.jpg
│   ├── file02.jpg
│   └── file03.jpg
└── dir3
    ├── file07.jpg
    ├── file08.jpg
    ├── file09.jpg
    └── file10.jpg

3 directories, 10 files

答案2

如果您确定文件名中没有其他逗号,您可以尝试如下操作:

for i in `find . -type f` ; do mv $i $(echo $i | sed 's/\(.*\),.*/\1/g') ; done

相关内容