下面的小脚本用于循环提供的路径的子目录,对这些子目录中的文件执行某些操作,然后删除这些子目录下的所有内容,使子目录保持不变但为空。
#!/bin/sh
basedir=$1
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
但是脚本似乎没有删除任何内容,其他代码在子目录下面的文件/文件夹上按预期工作。
答案 0 :(得分:1)
您不应在此处使用for循环迭代find
的输出,但也不需要find
。模式中的尾随/
将阻止subdir
设置为非目录文件系统条目。另外,请勿在{{1}}的参数中引用*
。
rm
答案 1 :(得分:0)
怎么样:
rm -rfv "$subdir/*"
而不是引用$dir
。如果$basedir
是包含目录的路径,我希望这会有所不同,例如:类似于a/b/c
。
另外,请尝试省略-f
命令中的rm
选项,它可能会打印出一些错误消息,以帮助您调试问题。