ProgramingTip

디렉토리의 각 파일에 대한 Linux 쉘 펼쳐 파일 이름을 갖춘 프로그램 실행

bestdevel 2020. 10. 20. 07:55
반응형

디렉토리의 각 파일에 대한 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

상기 봐 찾기 명령.

당신이 찾고있는 것은 다음과 가능합니다.

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

포스트 편집

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

자연 스럽다 xls2csv file.xls file.xls.csv

원하는 것에 더 가까이.


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

첫-th 줄의 do은 "일치하는"파일이 실제로 존재하는지 확인합니다., 일치 여부에서 for하는 항목 do이없는 경우은 "* .XLS"로 실행됩니다 $i. xls2csv.


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

참고 URL : https://stackoverflow.com/questions/2297510/linux-shell-script-for-each-file-in-a-directory-grab-the-filename-and-execute-a

반응형