在一个文件夹中,我假设有1.000.000个子文件夹。在Ubuntu Linux中,如何使用bash shell脚本使用以下命名模式为每个1000个文件夹创建一个新文件夹? 12位数字,例如000000001 000000002、000000003等
我可以去这里
cp -r directory_1 /user/home/office
但是我需要循环进入目录,并对找到的前1000个文件夹执行上述操作。然后找到接下来的1000个文件夹的上述命令 cp -r directory_1 / user / home / office
即使cp也不是我想要的,我想移动文件夹,但是在使用mv时出现错误
答案 0 :(得分:-1)
以下脚本创建一个包含12位数字的目录(例如000000000001
),并将子目录移动到该目录。对于每移动1.000个子目录,将创建一个新的12位数字目录,并且脚本继续。
您可以使用脚本的前三个变量来配置脚本:
oldParentDir
应当移动其子目录的目录newParentDir
一个现有目录,应放置新的12位数字目录。这可以与oldParentDir
相同。subDirsPerNewDir
每个12位数字目录的最大子目录数。#! /bin/bash
oldParentDir="directory/which/contains/1.000.000/subdirectories"
newParentDir="existing/directory/where/new/dirs/should/be/placed"
subDirsPerNewDir=1000
createdNewDirs=0
movedSubDirs=0
for subDir in "$oldParentDir/"*/; do
if (( movedSubDirs % subDirsPerNewDir == 0 )); then
(( createdNewDirs++ ))
newDir="$(printf %012d "$createdNewDirs")"
mkdir "$newParentDir/$newDir"
fi
mv "$subDir" "$newDir"
(( movedSubDirs++ ))
done
请注意,只有子目录被移动。如果您还想移动文件,请将"$oldParentDir/"*/
更改为"$oldParentDir/"*
。
分组按字母顺序进行。 subDirsPerNewDir=5
的示例:
sub1
,sub2
,...,sub100
,则目录sub1
,sub10
,{{1 }},sub100
和sub11
将移至sub12
。00000000001
,sub001
,...,sub002
,则目录sub100
,sub001
,{{1 }},sub002
和sub003
将移至sub004
。我假设sub005
至少包含一个子目录,而00000000001
确实已经包含具有12位数字名称的任何文件或目录(例如{ {1}})。您可以在脚本的开头添加oldParentDir
和newParentDir
,以使其更健壮。