簡體   English   中英

如何從Shell腳本中的舊文件名獲取新文件名?

[英]How to obtain new filename from old filename in the shell script?

我有一個具有輸入和輸出贊的可執行程序

./my_exe -i filename_input -o filename_output 

我想使用該程序運行結構類似的文件夾中的所有文件名

root
|-folder_A
   |-abc.txt
|-folder_B
   |cdf.txt

因此,我們可以使用它來做。 但是問題是我想通過在像abc.txt這樣的輸入文件名之前在'.txt'之前添加擴展名'_processed'來自動從filename_input進行filename_output的輸出。 然后輸出將是abc_processed.txt

如何在Shell腳本中執行此操作? 這是我目前的代碼

for sub_folder in "${root_folder[@]}"
        do            
            filename_input=$sub_folder/*.txt
            filename_output= filename_input/*.txt/processed.txt
            echo filename_output
        done

我的腳本的輸出是root/folder_A/*processed.txt 我不知道為什么abc丟失了

$ tree root
root
|-- directory-A
|   `-- abc.txt
`-- directory-B
    `-- def.txt

2 directories, 2 files
$ find root -type f -exec sh -c 'echo ${1%.txt}_processed.txt' _ {} \;
root/directory-B/def_processed.txt
root/directory-A/abc_processed.txt

要么:

$ for dir in root/*; do ( cd $dir; for file in *.txt; 
    do echo "$file --> ${file%.txt}_processed.txt"; done ) done
abc.txt --> abc_processed.txt
def.txt --> def_processed.txt

正確的解決方案取決於您要如何處理。
您應該遍歷要重命名的文件,而不是目錄。

for f in */*/*txt; do
   echo "With path ${f} ==> ${f//.txt/processed.txt}"
   base_f=${f##*/}
   echo "Basenames: ${base_f} ==> ${base_f//.txt/processed.txt}"
done

您可能要使用find ... | xargs 要使用這些文件調用my_exe時,需要使用find ... | xargs
確保您的*processed.txt不再被轉換!

暫無
暫無

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

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