어떻게 디렉터리에서의 및 경로 변경 및 추가 접미어입니다 파일_이름 파일에 대한 반복할 수

하지만 서로 다른 프로그램을 쓸 수 있는 스크립트입니다 데릭쉐퍼드와 내 인수만 I& # 39 m, 새로운 시작 내주었다. I start my 프로그램을 통해:

'./MyProgram.exe Data/data1.txt [Logs/data1_Log.txt]'.

다음은 의사코드 뭐하러요 I want to do.

for each filename in /Data do
  for int i = 0, i = 3, i++
    ./MyProgram.exe Data/filename.txt Logs/filename_Log{i}.txt
  end for
end for

그래서 정말 어찌할 바를 모르는 I& # 39 m 의 첫 번째, 두 번째 인수의 작성하는방법에 도왔으매 마치 내 프로그램였어 dataABCD_Log1.txt 및 시작

해결책

처음 몇 노트: '정말' /Data/data1.txt 인수로 Data/data1.txt 사용할 때 ',' 할 수 있는 대표적인 슬래시 (slash)? 또한, 바깥 고리 스캑 .txt 파일, 또는 모든 파일에 대해서만 합니다 / 데이터? # 39 의 경우 '와' /Data/data1.txt here& 답을 .txt 파일 제공용:


#!/bin/bash
for filename in /Data/*.txt; do
    for ((i=0; i
해설 (7)

그러나 이 사건은 네크로맨스링 반복할 때마다 스레드할 it& # 39 의 경우, 파일 (글 로빙 좋습니다 모퉁이점으로 예방할 수 있는 글롭 일치하지 않습니다 (확산될 수 있는 루프 변수를 문자열 (un 일치) 글롭 패턴 자체가).

예를 들면 다음과 같습니다.

for filename in Data/*.txt; do
    [ -e "$filename" ] || continue
    # ... rest of the loop body
done

참조: [Bash 특히] (http://mywiki.wooledge.org/BashPitfalls # 57 호선)

해설 (9)
for file in Data/*.txt
do
    for ((i = 0; i < 3; i++))
    do
        name=${file##*/}
        base=${name%.txt}
        ./MyProgram.exe "$file" Logs/"${base}_Log$i.txt"
    done
done

파일 이름 = $ {} '이' # */ 대체 ([쉘로 매개변수입니다 개확장] (http://www.gnu.org/software/bash/manual/bash.html # 쉘로 매개변수입니다 개확장) 최고의 경로명입니다 절감뿐만 최대 마지막 '/'.

기본 = $ {} '대체' 이 'name%.txt 절감뿐만 뒤에 .txt'. # 39 의 경우 난이도 확장명은 it& 조금 다를 수 있습니다.

해설 (2)

Aspt nulll 분판된 출력입니다 옵션과 함께 읽기 반복할 디렉토리 구조는 안전하게 사용할 수 있습니다.

#!/bin/bash
find . -type f -print0 | while IFS= read -r -d $'\0' file; 
  do echo "$file" ;
done

그래서 케이스


#!/bin/bash
find . -maxdepth 1 -type f  -print0 | while IFS= read -r -d $'\0' file; do
  for ((i=0; i
해설 (3)

39 you& 같은데, re trying to windows powershell 너희는 실행하십시오 파일 (.exe) 사용할 수 있어야 한다. 어쨌든 Linux 배시 셸을 간단한 한 줄 광고문 충분할 것이다.

[/home/$] for filename in /Data/*.txt; do for i in {0..3}; do ./MyProgam.exe  Data/filenameLogs/$filename_log$i.txt; done done

또는 배시

#!/bin/bash

for filename in /Data/*.txt; 
   do
     for i in {0..3}; 
       do ./MyProgam.exe Data/filename.txt Logs/$filename_log$i.txt; 
     done 
 done
해설 (1)