gpt4 book ai didi

linux - 使用for循环将文件从子目录移动到父目录

转载 作者:太空狗 更新时间:2023-10-29 11:44:56 26 4
gpt4 key购买 nike

我刚刚切换到 Linux,我正在尝试编写我的第一个 bash 脚本。我有一个包含许多文件夹的文件夹,所有文件夹都有包含文件的子文件夹。像这样的东西:

  • 主文件夹

    • 文件夹1
      • Sub1(包含很多文件)
      • Sub2(包含很多文件)
    • 文件夹2
      • Sub1(包含很多文件)
      • Sub2(包含很多文件)

    ...

我想将子文件夹中包含的所有文件移动到它们的父文件夹中。我的第一直觉是尝试编写一个 for 循环。我可以使用以下命令一次处理一个文件夹:

mv MainFolder/Folder1/*/* MainFolder/Folder1/

但我希望编写一个 bash 脚本来遍历主目录中的所有文件夹。这是我目前所拥有的:

#!/bin/bash

dir1="/pathto/MainFolder"

subs= ls $dir1

for i in $subs; do
mv "$dir1/$i/*/*" "$dir1/$i/"
done

这显然行不通,但我不明白我哪里出错了。

我也试过:

mv MainFolder/*/*/* MainFolder/*/

结果非常糟糕。文件移动正常后,我还想删除循环中的旧子文件夹。

最佳答案

小变化。改变

subs=ls $dir1

subs=`ls $dir1`

注意反引号。反引号实际上执行 bash 命令并返回结果。如果您在该行之后发出 echo $subs,您会发现它正确地列出了 folder1folder2

第二个小改动是删除 mv 命令中的双引号。将它们更改为

mv $dir1/$i/*/* $dir1/$i

双引号采用文字文件名,而删除引号采用递归目录模式。

在那之后,你的初始 for 循环确实是正确的。它会将所有内容从 sub1sub2 移动到 folder1 等。

关于linux - 使用for循环将文件从子目录移动到父目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22228718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com