gpt4 book ai didi

linux - 用于创建文件夹和移动文件的 bash 脚本

转载 作者:太空宇宙 更新时间:2023-11-04 12:42:53 24 4
gpt4 key购买 nike

我有很多模拟创建的文件。
像这样:res_00001.root 到 res_09999.root。

我想创建一系列文件夹,这些文件夹会根据我们要移动的文件名依次将 1000 个文件分批移动到新创建的文件夹中。例如folder1 将包含 res_00001.root 到 res_00999.root,folder2 res_01000.root 到 res_01999.root,...

我试图创建一个脚本,但它不起作用:

#!/bin/bash
N_files=$1
for (( file=0; file<$N_files; ++file )) do #state what file I am looking at
s=file%1000 INPUT=printf data/output_%04lu.root $file` OUTPUT=printf data/folder%02lu/res_%04lu.root $s # move the files
mv INPUT OUTPUT
done`

一段时间以来,我一直在努力解决这个问题,感谢您提供的任何帮助。

最佳答案

更新的答案

如果找不到 rename 程序,您可以运行这个小脚本 - 先做备份!

#!/bin/bash
shopt -s nullglob nocaseglob
for f in *.root; do
n=$(tr -dc '[0-9]' <<< $f)
((d=(10#$n/1000)+1))
[ ! -d folder$d ] && mkdir folder$d
echo mv "$f" folder$d/$f
done

原始答案

做一个备份,看看这对你的一小部分文件的副本是否有帮助:

rename --dry-run 's/[^0-9]//g; my $d=int($_/1000)+1; $_="folder$d/res_$_.root"' *root 

示例输出

'res_00001.root' would be renamed to 'folder1/res_00001.root'
'res_00002.root' would be renamed to 'folder1/res_00002.root'
'res_00003.root' would be renamed to 'folder1/res_00003.root'
'res_00004.root' would be renamed to 'folder1/res_00004.root'
'res_00005.root' would be renamed to 'folder1/res_00005.root'
...
...
'res_00997.root' would be renamed to 'folder1/res_00997.root'
'res_00998.root' would be renamed to 'folder1/res_00998.root'
'res_00999.root' would be renamed to 'folder1/res_00999.root'
'res_01000.root' would be renamed to 'folder2/res_01000.root'
'res_01001.root' would be renamed to 'folder2/res_01001.root'
'res_01002.root' would be renamed to 'folder2/res_01002.root'
'res_01003.root' would be renamed to 'folder2/res_01003.root'
...
...

如果它看起来不错,请删除 --dry-run,这样它就可以实际执行操作,而不仅仅是说它执行什么操作!

  • s/[^0-9]//g 去掉文件名中的任何非数字
  • my $d=int($_/1000)+1 计算目录名
  • $_="folder$d/res_$_.root" 构建输出文件名

关于linux - 用于创建文件夹和移动文件的 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39663770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com