如果文件夹名称在bash中以4位数字结尾,则在此处递归重命名并添加parenthere
我一直在尝试递归重命名名称以四位数字结尾的文件夹 例如,我的文件夹名称如下:如果文件夹名称在bash中以4位数字结尾,则在此处递归重命名并添加parenthere,bash,rename,recursive-query,parentheses,mv,Bash,Rename,Recursive Query,Parentheses,Mv,我一直在尝试递归重命名名称以四位数字结尾的文件夹 例如,我的文件夹名称如下: 这是名称2004 我正试图将其重命名为: 这是名字(2004) 我已尝试拆分名称的前缀和数字部分,但无法将这些文件夹重命名为mv 以下是我迄今为止尝试过的代码: #!/bin/bash F=$(find . -name '*[0-9]' -type d) for i in "$F"; do R2=$(echo "$i" | awk '{print $NF}') R1=$(echo "$i" | sed 's/.\{
这是名称2004
我正试图将其重命名为:
这是名字(2004)
我已尝试拆分名称的前缀和数字部分,但无法将这些文件夹重命名为mv
以下是我迄今为止尝试过的代码:
#!/bin/bash
F=$(find . -name '*[0-9]' -type d)
for i in "$F";
do
R2=$(echo "$i" | awk '{print $NF}')
R1=$(echo "$i" | sed 's/.\{4\}$//')
R3=$(echo "$R2" | sed -r "s/(^[0-9]+$)/(\1)/g")
mv "$i" "$R1 $R3"
# Even tried:
mv "\"$i"\" "\"$R2 $R3"\"
done
是否有人可以查看或/和建议一些指导,以允许mv
查找初始文件夹及其目标?以下命令:
find -name '*[0-9][0-9][0-9][0-9]' -type d -exec bash -c 'for dir; do mv "$dir" "${dir%[0-9][0-9][0-9][0-9]}(${dir#${dir%[0-9][0-9][0-9][0-9]}})"; done' - {} + -prune
应该有用
- 双引号环绕变量展开式
删除最后4位后缀${dir%[0-9][0-9][0-9][0-9]}
删除前面的前缀${dir#${dir%[0-9][0-9][0-9][0-9]}
要跳过-exec bash-c'..'-{}+
后的第一个参数,该命令用于-c命令
,请参见-0
man bash
/-c
,以防止在子树中搜索(假设-在匹配时在末尾修剪
然后2004/2004
或mv 2004/2004(2004)/2004将失败)mv 2004/2004“2004/(2004)”
#!/usr/bin/ruby
require 'fileutils'
dirs = Dir.glob('./**/*').select {|x| x =~ / [0-9]*/ }
dirs.sort().reverse().each do |dir|
new_name=dir.gsub(/(.*)( )([0-9]{4})/, '\1\2(\3)')
FileUtils.mv dir,new_name
end
<> > <代码> $f/COD>有一个以上的引导,for循环将它视为一个带有新行的长条目(尝试<代码>回音'F= [$F] )。 同时使用
-depth
,您可能有topdir 2004/subdir 2004
。因此,首先重命名子曲面
当目录没有换行符时,您可以尝试
#!/bin/bash
while IFS= read -r orgdir; do
mv "${orgdir}" "$(sed -r "s/([0-9]+$)/(\1)/g" <<< "${orgdir}")"
done < <(find . -depth -name '*[0-9]' -type d)
#/bin/bash
而IFS=read-r orgdir;做
mv“${orgdir}”“$(sed-r“s/([0-9]+$)/(\1)/g”是要重命名为递归的文件夹吗?类似于这样的结构:str 123/str 456/
必须重命名为str(123)/str(456)
?你需要查找
选项,使它从最深的目录遍历目录,它在人类的某个地方……是的,这确实是个想法。bash-c'for dir'…
对我来说很奇怪。与-exec bash-c'mv“$1”“${1%[0-9][0-9][0-9]这样的单个进程相比,它是否节省了内存/执行速度(${1#${1%[0-9][0-9][0-9][0-9]}>”--{}\
?为了避免为每个mv启动一个批处理过程,应该执行基准测试以查看,但与您的注释不同,它不会重命名嵌套目录