gpt4 book ai didi

linux - 在顺序编号的目录之间插入新的编号目录

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

我正在尝试将一个新目录插入到已创建目录的列表中。例如,如果我有以下子目录列表:

00 01 02 03 04 05 06 07 08 09 10 11 12 13

我想插入一个名为 04 的新子目录,并将其余子目录向上移动一位:

00 01 02 03 04 05 06 07 08 09 10 11 12 13 14

显然我不能将旧的 04 移动到 05,因为已经有一个名为那个的目录。子目录列表总是从 00 开始,可以在任何地方结束,直到 99(没有固定数量的目录),并且永远不会丢失任何子目录(即 01 02 03 05 永远不会发生)。如果可能的话,我很乐意用 bash 脚本来完成这一切;如果没有,我会寻求任何帮助!

最佳答案

下面是您可以直接使用 Bash 解决它的方法,无需外部命令(mv 除外):

#!/bin/bash

newdir=$1

# Put all directories into array
dirs=(*/)

# Remove trailing "/" from each array element
dirs=("${dirs[@]/%\/}")

# Get index of last directory
lastidx=$(( ${#dirs[@]} - 1 ))

# Loop over directories, starting with last, down to the one with the same
# name as the one being inserted
# Use 10# to force decimal instead of octal interpretation of name
for (( idx = lastidx; idx >= 10#$newdir; --idx )); do
# New name of directory is current name plus 1
# Again 10# to avoid confusion because of leading zeros interpreted as
# octal values
printf -v newname '%02d' "$(( 10#${dirs[idx]} + 1 ))"
echo "Renaming ${dirs[idx]} to $newname"
mv "${dirs[idx]}" "$newname"
done

对于像这样的现有目录结构

.
├── 00
├── 01
├── 02
├── 03
├── 04
├── 05
├── 06
├── 07
├── 08
├── 09
├── 10
├── 11
├── 12
└── 13

你可以像这样使用它

$ ./insertdir 04
Renaming 13 to 14
Renaming 12 to 13
Renaming 11 to 12
Renaming 10 to 11
Renaming 09 to 10
Renaming 08 to 09
Renaming 07 to 08
Renaming 06 to 07
Renaming 05 to 06
Renaming 04 to 05

最后是

.
├── 00
├── 01
├── 02
├── 03
├── 05
├── 06
├── 07
├── 08
├── 09
├── 10
├── 11
├── 12
├── 13
└── 14

也就是说,脚本实际上并没有插入任何东西——它为新目录腾出了空间。

关于linux - 在顺序编号的目录之间插入新的编号目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46203245/

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