Linux 将文件从特定目录向上移动一个目录并删除空文件夹

Linux 将文件从特定目录向上移动一个目录并删除空文件夹

我需要将文件从目录中的目录中的目录中移出,并删除我移动它们的文件夹。我需要一个递归脚本。目录结构:

/Folder0/Alphabetic_folder/Folder_name/DeleteFolder

/Folder0/A/Folder1/DeleteFolder
/Folder0/B/Folder2/DeleteFolder

DeleteFolder总是有相同的名称,即info。我需要类似的东西:

  1. 进入目录(按字母顺序)
  2. 对于其中的所有文件夹,如果当前文件夹中有一个info文件夹,则删除(即:)mv *.*infomv info/* ./ && rm info
  3. 如果info没有则退出文件夹
  4. 移至下一个文件夹

我确信这是一个只需要一些脚本技巧就能解决的小问题,但是我的脚本技巧在这个问题上很低。

答案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

相关内容