![](/img/trans.png)
[英]Download all csv files from Subdirectories that match across differnet directories
[英]Using for loop to move files from subdirectories to parent directories
我剛剛切換到 linux,我正在嘗試編寫我的第一個 bash 腳本。 我有一個包含許多文件夾的文件夾,所有文件夾都包含包含文件的子文件夾。 就像是:
主文件夾
. . .
我想將子文件夾中包含的所有文件移動到它們的父文件夾。 我的第一直覺是嘗試編寫一個 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
,您會發現它正確列出了folder1
、 folder2
。
第二個小變化是刪除mv
命令中的雙引號。 將它們更改為
mv $dir1/$i/*/* $dir1/$i
雙引號采用文字文件名,而刪除引號采用遞歸目錄模式。
之后,您的初始 for 循環確實是正確的。 它會將所有內容從sub1
和sub2
移動到folder1
等。
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.