我需要将文件从目录中的目录中的目录中移出,并删除我移动它们的文件夹。我需要一个递归脚本。目录结构:
/Folder0/Alphabetic_folder/Folder_name/DeleteFolder
/Folder0/A/Folder1/DeleteFolder
/Folder0/B/Folder2/DeleteFolder
DeleteFolder
总是有相同的名称,即info
。我需要类似的东西:
- 进入目录(按字母顺序)
- 对于其中的所有文件夹,如果当前文件夹中有一个
info
文件夹,则删除(即:)mv *.*
info
mv info/* ./ && rm info
- 如果
info
没有则退出文件夹 - 移至下一个文件夹
我确信这是一个只需要一些脚本技巧就能解决的小问题,但是我的脚本技巧在这个问题上很低。
答案1
UPD. 这样效果会更好 :)
find -depth -print0 | while read -d '' -r dir; do if [[ $dir == *info ]]; then mv "$dir"/* /tmp; rmdir "$dir"; fi; done
旧答案在这里:
#!/bin/bash
cd /Folder0
for i in `ls`; do #get list of files and dirs in a folder0
if [ -d $i ]; then #if list item is a folder
cd $i #then go inside (in you ex its folder A)
for j in `ls`; do #list folders and files
if [ -d $j ]; then #if item is folder
cd $j #go inside (in your ex - Folder1)
mv info/* /any_folder_you_want #it will not move files if there is an error
rmdir info/ #it will not remove dir if it is not empty
cd .. #(go down)
fi #(go to the next folder Folder2)
done; #end of folder A
cd .. #go down
fi #next folder B...
done
您必须使用 mv 和 rmdir 更改部分以测试您是否获得正确的结果,只需将 ls 放在那里并使用 mv 和 rmdir 注释行:
#mv info/* /any_folder_you_want #it will not move files if there is an error
ls
#rmdir info/ #it will not remove dir if it is not empty
您必须在 Folder1 之外运行该脚本。
问题?
答案2
假设搜索工作目录中的所有 alpha 目录:
dirs=$(find [a-z][A-Z]* -type d -name info)
for f in $dirs; do echo "$f/*" done # first test it works to requirements
for f in $dirs; do mv "$f/*" "$f"/..; rmdir "$f"; done # working version with mv and rmdir