[linux] 디렉토리의 각 파일에 대한 Linux 쉘 스크립트 파일 이름을 잡고 프로그램 실행

시나리오 :

Linux 시스템의 폴더. 폴더의 모든 .xls 파일을 반복하고 싶습니다.

이 폴더는 일반적으로 다양한 폴더, 다양한 파일 형식 (.sh, .pl, .csv, …)으로 구성됩니다.

내가 원하는 것은 루트의 모든 파일을 반복 하고 .xls 파일에서만 프로그램을 실행하는 것입니다.

편집하다 :

문제는 내가 실행해야하는 프로그램이 .xls에서 .csv 형식으로 변환하는 ‘xls2csv’라는 것입니다. 따라서 각 .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 . -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


답변