Shell-脚本删除 for 循环中的子目录
Shell-script removing subdirectories in a for-loop
下面的小脚本旨在遍历所提供路径的子目录,对这些子目录中的文件执行一些操作,然后删除这些子目录下的所有内容,使子目录完好无损但为空。
#!/bin/sh
basedir=
for subdir in $(find "$basedir" -mindepth 1 -maxdepth 1 -type d); do
dir=`basename $subdir`
# Some other code here
# ...
echo "Removing subdirectories $subdir/*"
rm -rfv "$dir/*"
done
例如下面的目录树:
.
├── test1
│ ├── db_1422323507_1421673171_272
│ │ └── rawdata
│ ├── db_1423828548_1423645476_289
│ │ └── rawdata
│ ├── db_1423837057_1423828554_290
│ │ └── rawdata
│ ├── db_1423838029_1423837138_291
│ │ └── rawdata
│ └── db_1424102912_1423838103_292
│ └── rawdata
├── test2
├── test3
│ ├── db_1430478916_1429109291_82
│ │ └── rawdata
│ ├── db_1430517825_1430478932_83
│ │ └── rawdata
│ ├── db_1430518751_1430518207_84
│ │ └── rawdata
│ └── db_1430920306_1430913191_86
│ └── rawdata
├── test4
│ └── db_1436338354_1430920324_100
│ └── rawdata
└── test5
在 运行 脚本之后 ./myscript.sh .
我希望看到以下目录树。
.
├── test1
├── test2
├── test3
├── test4
└── test5
但脚本似乎没有删除任何内容,其他代码 在子目录下的 files/folders 上按预期工作。
怎么样:
rm -rfv "$subdir/*"
而不是引用 $dir
。如果 $basedir
是其中包含目录的路径,我希望这会有所不同,例如像 a/b/c
.
此外,尝试从 rm
命令中省略 -f
选项,它可能会打印出一些错误消息,这将帮助您调试问题。
您不应该在此处使用 for 循环遍历 find
的输出,但是 find
也不是必需的。模式中的尾随 /
将防止 subdir
被设置为非目录文件系统条目。另外,不要在 rm
.
的参数中引用 *
#!/bin/sh
basedir=
for subdir in "$basedir"/*/; do
dir=`basename $subdir`
# Some other code here
# ...
echo "Removing subdirectories $subdir/*"
rm -rfv "$dir/"*
done
下面的小脚本旨在遍历所提供路径的子目录,对这些子目录中的文件执行一些操作,然后删除这些子目录下的所有内容,使子目录完好无损但为空。
#!/bin/sh
basedir=
for subdir in $(find "$basedir" -mindepth 1 -maxdepth 1 -type d); do
dir=`basename $subdir`
# Some other code here
# ...
echo "Removing subdirectories $subdir/*"
rm -rfv "$dir/*"
done
例如下面的目录树:
.
├── test1
│ ├── db_1422323507_1421673171_272
│ │ └── rawdata
│ ├── db_1423828548_1423645476_289
│ │ └── rawdata
│ ├── db_1423837057_1423828554_290
│ │ └── rawdata
│ ├── db_1423838029_1423837138_291
│ │ └── rawdata
│ └── db_1424102912_1423838103_292
│ └── rawdata
├── test2
├── test3
│ ├── db_1430478916_1429109291_82
│ │ └── rawdata
│ ├── db_1430517825_1430478932_83
│ │ └── rawdata
│ ├── db_1430518751_1430518207_84
│ │ └── rawdata
│ └── db_1430920306_1430913191_86
│ └── rawdata
├── test4
│ └── db_1436338354_1430920324_100
│ └── rawdata
└── test5
在 运行 脚本之后 ./myscript.sh .
我希望看到以下目录树。
.
├── test1
├── test2
├── test3
├── test4
└── test5
但脚本似乎没有删除任何内容,其他代码 在子目录下的 files/folders 上按预期工作。
怎么样:
rm -rfv "$subdir/*"
而不是引用 $dir
。如果 $basedir
是其中包含目录的路径,我希望这会有所不同,例如像 a/b/c
.
此外,尝试从 rm
命令中省略 -f
选项,它可能会打印出一些错误消息,这将帮助您调试问题。
您不应该在此处使用 for 循环遍历 find
的输出,但是 find
也不是必需的。模式中的尾随 /
将防止 subdir
被设置为非目录文件系统条目。另外,不要在 rm
.
*
#!/bin/sh
basedir=
for subdir in "$basedir"/*/; do
dir=`basename $subdir`
# Some other code here
# ...
echo "Removing subdirectories $subdir/*"
rm -rfv "$dir/"*
done