簡體   English   中英

如何從多個文件夾中提取文件並根據文件夾名稱 (bash) 重命名?

[英]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

樣本 output

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.

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