특정 폴더 dir1의 파일을 처리하는 방법을 알고 싶습니다(다양한 작업을 통해 파이프되는 경우). 마지막에는 출력이 동일한 폴더 구조와 파일 이름에 기록되기를 원합니다. 즉, 파일이 2개 있다고 가정합니다. dir1/file1
그리고 dir1/file2
. 나는 다음 명령을 원합니다 :
task1 dir1/* | task2 | task3 --output dir2/${filename}
Output dir2/file1
- dir2/file2
처리된 파일을 나타내야 합니다.
답변1
file 의 파일을 반복하고 dir1
, 각 파일의 기본 이름을 가져와서 처리하고, 출력 파일에 씁니다.
for path in dir1/*; do
name="${path##*/}"
task1 "$path" | task2 | task3 --output "dir2/$name"
done
변수 대체는 ${path##*/}
변수의 값을 사용하여 path
마지막 변수까지 모든 것을 제거합니다 /
. 그러면 파일의 기본 이름이 생성됩니다.
task1
그런 다음 의 파일이 실행되고 dir1
결과가 에 전달되고 task2
해당 출력이 에 제공됩니다 task3
. 마지막 작업은 dir2/$name
해당 스위치의 피연산자 로 사용됩니다 --output
. 여기서 는 $name
경로가 없는 파일 이름입니다 $path
.
답변2
cd "dir1" && \
find . -maxdepth 1 -type f -exec sh -c '
# task2 on "$1" | task3 > "/path/to/dir2/${1##*/}
' {} {} \;