簡體   English   中英

目錄中每個文件的Linux Shell腳本獲取文件名並執行程序

[英]Linux Shell Script For Each File in a Directory Grab the filename and execute a program

場景:

Linux系統中的一個文件夾。 我想遍歷文件夾中的每個.xls文件。

此文件夾通常包含各種文件夾,各種文件類型(.sh,.pl,.csv,...)。

我想要做的就是循環遍歷根目錄中的所有文件,並僅在.xls文件上執行程序。

編輯:

問題是我必須執行的程序是'xls2csv'才能從.xls轉換為.csv格式。 因此,對於每個.xls文件,我必須獲取文件名並將其附加到.csv。

例如,我有一個test.xls文件,xls2csv的參數是: xls2csv test.xls test.csv

我有道理嗎?

慶典:

for f in *.xls ; do xls2csv "$f" "${f%.xls}.csv" ; done
for i in *.xls ; do 
  [[ -f "$i" ]] || continue
  xls2csv "$i" "${i%.xls}.csv"
done

do的第一行檢查“匹配”文件是否確實存在,因為如果你的for沒有匹配,則do將以“* .xls”作為$i 這對你的xls2csv可能很糟糕。

查看find命令。

你要找的是什么

find . -name "*.xls" -type f -exec program 

發布編輯

find . -name "*.xls" -type f -exec xls2csv '{}' '{}'.csv;

將執行xls2csv file.xls file.xls.csv

更接近你想要的。

find . -type f -name "*.xls" -printf "xls2csv %p %p.csv\n" | bash

bash 4(遞歸)

shopt -s globstar
for xls in /path/**/*.xls
do
  xls2csv "$xls" "${xls%.xls}.csv"
done

暫無
暫無

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

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