簡體   English   中英

使用for循環將文件從子目錄移動到父目錄

[英]Using for loop to move files from subdirectories to parent directories

我剛剛切換到 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等。

!/bin/bash

dir1="/pathto/MainFolder"

子 = ls $dir1

因為我在 $subs 中;

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

完畢

是的 - 這是有效的解決方案

#!/bin/bash

mainDir="$(dirname $(realpath $0))/store/media"

subs=`ls $mainDir`

for i in $subs; do
    if [[ -d "$mainDir/$i" ]]; then
        mv "$mainDir/$i"/* "$mainDir/"
        rm -rf "$mainDir/$i"
    fi
done

我想使用“for”循環將 4kb 文件從 /home/ubuntu/ 移動到 /home/ubuntu/jaga。 它顯示非法數字 #!/bin/bash value=4 for i in /home/ubuntu/*;

size=$(du -h "$i" | awk '{print $1}')

if [ $size -eq $value ] 然后 echo "4kb files $i" move -f $i /home/ubuntu/jaga fi

完畢

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM