Dit*_*tte 7 command-line bash files rename
我正在我的终端中使用 bash 尝试重命名文件夹:
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
我想根据 a.txt 文件重命名它们:
a 2
c 3
d 5
e 1
b 4
Run Code Online (Sandbox Code Playgroud)
.txt 文件中的顺序是完全随机的。我希望找到一种方法可以重命名文件夹,使它们变为:
1 > e
2 > a
3 > c
4 > b
5 > d
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
非常感谢!
你可以使用xargs
同mv
:
xargs -r -a /path/to/file.txt -L1 mv
Run Code Online (Sandbox Code Playgroud)
(假设您位于文件所在的目录中)。
xargs
将输入转换为命令的参数。
-a foo
从 中读取输入foo
。-L1
每个命令调用只使用一行输入。-r
如果该行为空,则避免运行该命令例如,使用echo mv
而不是mv
显示正在运行的命令:
$ xargs -r -a foo.txt -L1 echo mv
mv a 2
mv c 3
mv d 5
mv e 1
mv b 4
Run Code Online (Sandbox Code Playgroud)
您还可以在运行命令之前使用该-p
选项进行xargs
确认:
$ xargs -r -p -a foo.txt -L1 mv
mv a 2 ?...n
mv c 3 ?...n
mv d 5 ?...y
mv e 1 ?...mv: cannot stat ‘d’: No such file or directory
n
mv b 4 ?...
Run Code Online (Sandbox Code Playgroud)
假设列表中的名称不包含空格(名称之间除外) ,下面的脚本将以递归方式重命名文本文件中的文件夹。它将读取文件的行,将它们分成两部分(新名称,旧名称),将由行中第二个字符串命名的出现的文件夹重命名为行中的第一个字符串。
正如前面提到的,它将在目录树中从下到上递归地执行此操作。这可以防止脚本中出现问题,尝试重命名可能已重命名的父文件夹中的文件夹。
#!/usr/bin/env python
import os
import shutil
# -- set the (absolute) path to the targeted folder below
dr = "/home/jacob/Bureaublad/testfolder"
# -- set the path to the textfiles below
ren = "/home/jacob/Bureaublad/testfolder/renfile.txt"
renlist = [cpl for cpl in [l.split() for l in open(ren).readlines()] if cpl]
currnames = [r[1] for r in renlist]
for root, dirs, files in os.walk(dr, topdown = False):
for dr in dirs:
try:
# look up the name, pass if not in the list
i = currnames.index(dr)
except ValueError:
pass
else:
newname = renlist[i][0]
shutil.move(root+"/"+dr, root+"/"+newname)
Run Code Online (Sandbox Code Playgroud)
rename.py
通过命令运行它(在终端中):
python /path/to/rename.py
Run Code Online (Sandbox Code Playgroud)剧本:
os.walk()
,它会从下到上递归地查找您的目录。