[英]How can I extract files from multiple folders and rename according to folder name (bash)?
我有一個文件夾 A,其中有文件夾 B1、B2、B3 等。每個文件夾都包含 log.txt 文件。 我想要做的(使用 bash)是將所有 log.txt 文件提取到文件夾 A 並將它們重命名為 B1.txt、B2.txt、B3.txt 等。我該怎么做?
我嘗試了下面的腳本,但出現錯誤:dr = sys.argv[1] IndexError: list index out of range
導入 shutil 導入操作系統 導入系統
dr = sys.argv[1]
對於 os.walk(dr) 中的根、目錄、文件:對於文件中的文件:if file == "log.txt": spl = root.split("/"); 新名字 = spl[-1]; sup = ("/").join(spl[:-1]) shutil.move(root+"/"+file, sup+"/"+newname+".txt"); shutil.rmtree(根)
就像是:
#!/bin/bash
cd A || exit 1
for i in B*/; do
i=${i%/}
[[ -f "$i"/log.txt ]] &&
mv "$i"/log.txt "$i".txt
done
還有B+([0-9])/
(而不是B*
)專門匹配目錄名稱中的一個或多個數字。 首先需要shopt -s extglob
。
A for 循環 B... 目錄應該完成
假設A
目錄與 B 相鄰...
# try run
for file in B{1,2,3}/*.txt; do
echo $file A/${file%/*}.txt;
done
B1/log.txt A/B1.txt
B2/log.txt A/B2.txt
B3/log.txt A/B3.txt
# safe-run
# cp not mv, not lose your files
for file in B{1,2,3}/*.txt; do
cp $file A/${file%/*}.txt;
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.