gpt4 book ai didi

regex - 如何根据它们的值将目录中的所有文件夹移动到子目录?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:25:02 25 4
gpt4 key购买 nike

我继承控制权的遗留 Web 应用程序似乎已达到我的 Web 服务器上文件夹中子目录的最大数量。每当在系统中创建文章时,它的静态内容都会放置在与模式 /uploads/story/{STORY_ID}/ 匹配的文档根目录中。但是现在系统无法在/uploads/story/ 文件夹中创建任何新目录。

我想分两步解决这个问题,但我不确定如何运行必要的 linux 命令来实现这一点。你能帮忙吗?

  1. 作为给我更多时间实现更好的目录结构的临时解决方案,我想归档所有 STORY_ID 小于 1000 的故事的静态内容。这些应该从 中移出/uploads/story//uploads/story_archive/

  2. 我将在代码中将上传路径更改为 /uploads/story/{THOUSANDS}/{STORY_ID}/,但需要能够移动其中的所有文件夹/uploads/story/ 转换成这种格式。例如/uploads/story/65312/ 将变为 /uploads/story/65/65312/。我该怎么做?

编辑

修复 (1) 就像运行一样简单:

$ cd /path/to/uploads/
$ mkdir story_archive
$ for i in {1..999}; do mv story/$i story_archive/; done

最佳答案

鉴于您确定/uploads/story/* 会在* 部分给您一个数字,您可以执行以下操作(注意:备份以防万一):

# update this based on your actual directory
path_to_fix=/uploads/stories

# move the directories out of the way so they don't get mixed up
mv $path_to_fix $path_to_fix/../temp
mkdir $path_to_fix > /dev/null 2>&1

# get all directories to be moved
dirs=$(ls $path_to_fix/../temp)

# for each of them
for d in $dirs; do
# get the basename, which is store_id
id=$(basename $d)
# divide by 1000
sub=$((id / 1000))
# create the appropriate directory
mkdir $path_to_fix/$sub > /dev/null 2>&1
# move the original directory to that sub-directory
mv $path_to_fix/../temp/$d $path_to_fix/$sub
done

# cleanup
rm -Rf $path_to_fix/../temp

关于regex - 如何根据它们的值将目录中的所有文件夹移动到子目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14355279/

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