【问题标题】:Loop to execute a command in each subfolder循环执行每个子文件夹中的命令
【发布时间】:2022-11-02 00:05:16
【问题描述】:

*每个文件夹都有另一个文件夹,我需要将其所有内容向上移动一个文件夹,然后将其删除:

Main_folder
   -->DePreter.Jonas
       -->Huistaak1-HelloWorld_Jonas.DePreter.s.ua_poging_2019-11-12
          --> (Files and folders name doesn't matter)
   -->(another_name)
       -->Huistaa1-HelloWorld_(name)...
          --> more files
    ...

所以我需要访问每个名称文件夹(例如“DePreter.Jonas”)并将所有文件从 Huistaak1-HelloWorld... 移动到它所在的名称文件夹,然后删除 Huistaak1... 文件夹

我已经写了这个,但这太长了,我想循环使用它。

cd DePreter.Jonas
mv */* */.* . 
find . -type d -name "Huistaak1*" -delete
cd ..

cd Feremans.Len
mv */* */.* . 
find . -type d -name "Huistaak1*" -delete
cd ..

cd Hofkens.Peter
mv */* */.* . 
find . -type d -name "Huistaak1*" -delete
cd ..

cd Janssens.Jan
mv */* */.* . 
find . -type d -name "Huistaak1*" -delete
cd ..

cd Peters.Jolien
mv */* */.* . 
find . -type d -name "Huistaak1*" -delete
cd ..

cd VanHoof.Sarah
mv */* */.* . 
find . -type d -name "Huistaak1*" -delete
cd ..

【问题讨论】:

    标签: linux bash ubuntu


    【解决方案1】:

    这可能是你所追求的:

    cd /path/to/Main_folder || exit
    
    for dir in */*/
    do
        cd "$dir" || exit
        mv ./* ..
        cd - >/dev/null || exit
        rmdir "$dir"
    done
    

    或者,在循环体内没有 cding 的更简洁:

    cd /tmp/t/Main_folder || exit
    
    for dir in */*/
    do
        mv "$dir"* "${dir%%/*}"
        rmdir "$dir"
    done
    

    (顺便说一句,这些与regex 无关)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多