[英]how to pass the filename as variable to a awk command from a shell script
[英]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.