【Shell】批量创建目录、批量修改目录名

1. 批量创建目录

1.1 当前目录下创建目录

1.在当前目录下创建文件dirName.txt,该文件用于存放目录名,每行写一个目录名。

注:每行内容末尾不能有空格,用vscode打开,选择行尾序列为LF

在这里插入图片描述
2.在当前目录下创建文件batch_mkdir.sh,内容如下:

# 批量创建目录
for dirName in `cat  dirName.txt`
do
    echo $dirName
    mkdir $dirName
done

再执行脚本sh batch_mkdir.sh ,即成功创建了目录test1test2test3

# 执行脚本
$ sh batch_mkdir.sh
test1
test2
test3

# 查看目录结构
$ tree
.
|-- batch_mkdir.sh
|-- dirName.txt
|-- test1
|-- test2
`-- test3

3 directories, 2 files

1.2 创建多级目录

1.mkdir -p可以创建多级目录,如mkdir -p a/b/c在当前目录下创建了多级目录a -b -c

# 创建多级目录
$ mkdir -p a/b/c

# 查看目录结构
$ tree a
a
`-- b
    `-- c

2 directories, 0 files

2.想要批量递归创建目录,只需要改动mkdirmkdir -pdirName.txt中每行内容格式改为a/b/c格式即可。

# 批量创建多级目录
for dirName in `cat  dirName.txt`
do
    echo $dirName
    mkdir -p $dirName
done

例:dirName.txt内容如下:

# 查看dirName.txt内容
$ cat dirName.txt
test1/a
test2/a
test3/a

执行脚本结果如下:

# 执行脚本
$ sh batch_mkdir.sh
test1/a
test2/a
test3/a

# 查看目录结构
$ tree
.
|-- batch_mkdir.sh
|-- dirName.txt
|-- test1
|   `-- a
|-- test2
|   `-- a
`-- test3
    `-- a

6 directories, 2 files

2. 批量修改目录名

2.1 修改当前目录下的目录名

1.在当前目录下创建文件oldName.txtnewName.txt,分别用于存放原目录名和新目录名:

注:每行内容末尾不能有空格,用vscode打开,选择行尾序列为LF

原目录名如下:

# 查看oldName.txt内容
$ cat oldName.txt
test1
test2
test3

新目录名如下:

# 查看newName.txt内容
$ cat newName.txt
test_1
test_2
test_3

2.在当前目录下创建文件batch_rename_dir.sh,内容如下:

# 批量修改目录名
lines=`sed -n '$=' oldName.txt` # oldName.txt的行数

for line in `seq 1 $lines`  
do  
    oldName=`sed -n "${line}p" oldName.txt`
    newName=`sed -n "${line}p" newName.txt`
    mv $oldName $newName
    echo "$oldName -> $newName"
done  

执行脚本结果如下:

# 执行脚本前的目录结构
$ tree
.
|-- batch_rename_dir.sh
|-- newName.txt
|-- oldName.txt
|-- test1
|-- test2
`-- test3

3 directories, 3 files

# 执行脚本
$ sh batch_rename_dir.sh
test1 -> test_1
test2 -> test_2
test3 -> test_3

# 执行脚本后的目录结构
$ tree
.
|-- batch_rename_dir.sh
|-- newName.txt
|-- oldName.txt
|-- test_1
|-- test_2
`-- test_3

3 directories, 3 files

2.2 修改多级目录

oldName.txtnewName.txt内容格式改为多级目录格式即可,多级目录格式,如a/b/c

原目录名如下:

$ cat oldName.txt
test1/a
test2/a
test3/a

新目录名如下:

$ cat newName.txt
test1/b
test2/b
test3/b

执行脚本结果如下:

# 执行脚本前的目录结构
$ tree
.
|-- batch_rename_dir.sh
|-- newName.txt
|-- oldName.txt
|-- test1
|   `-- a
|-- test2
|   `-- a
`-- test3
    `-- a

6 directories, 3 files
 
 # 执行脚本
$ sh batch_rename_dir.sh
test1/a -> test1/b
test2/a -> test2/b
test3/a -> test3/b

# 执行脚本后的目录结构
$ tree
.
|-- batch_rename_dir.sh
|-- newName.txt
|-- oldName.txt
|-- test1
|   `-- b
|-- test2
|   `-- b
`-- test3
    `-- b

6 directories, 3 files

其他批量文件操作,可查看我的另一篇文章:
【Shell】批量操作文件:查找文件路径、批量删除文件、批量重命名文件、批量将文件移至上级目录

猜你喜欢

转载自blog.csdn.net/aidijava/article/details/127155100