선택은 스크립트를 실행할 때 제출된 매개변수를 기반으로 해야 합니다.
#!/bin/bash
#This script echoes a text and creates a file
echo "welcome. Will create a file with content in this folder"
ls -l | grep .txt > files_in_folder
답변1
스크립트 사용자가 파일 이름에 대한 파일 이름 접미사를 선택하려는 인수를 사용한다고 가정합니다 .txt
.
#!/bin/sh
printf '%s\n' ./*"$1"
그러면 주어진 파일 이름 접미사로 끝나는 현재 디렉터리의 모든 이름이 나열됩니다. 이 printf
명령은 쉘이 모드를 확장할 때(마지막에 사용자가 제공한 인수 포함) 목록을 생성한 다음 printf
형식 문자열을 기반으로 한 줄에 각 목록 항목(이 경우 파일 이름)을 출력합니다. 여기에 사용된 형식 문자열은 %s\n
"개행 문자가 뒤에 오는 문자열"을 의미하는 입니다.
ls -l
다음을 사용하여 파일 메타데이터가 포함된 "긴 목록"을 얻으 시겠습니까 ?
#!/bin/sh
ls -ld ./*"$1"
-d
이는 패턴과 일치하는 디렉터리의 내용이 나열되지 않도록 하기 위해 필요합니다 . 마찬가지로, 쉘은 주어진 패턴을 확장하고 ls -ld
일치하는 파일 이름 목록을 사용하여 이를 호출합니다.
하위 디렉터리에 이름을 포함하려면 다음을 사용하세요 bash
.
#!/bin/bash
shopt -s globstar
printf '%s\n' ./**/*"$1"
**
이 옵션을 사용하여 패턴을 활성화하면 패턴이 하위 디렉터리에 반복적으로 일치됩니다 globstar
. 분명히 위의 패턴을 사용할 수도 있지만 ls -ld
패턴이 다음과 같이 확장되면 깨질 가능성이 있습니다.수천파일 이름.
목록을 다음으로 제한일반 파일(즉, 디렉토리 이름 등이 아니라 숨겨진 이름을 포함함) 하위 디렉토리로 이동하는 동안:
#!/bin/sh
find . -name "*$1" -type f
-ls
출력과 유사한 내용이 필요한 경우 end 에 추가하세요 ls -ld
.
이는 수천 개의 일치하는 파일 이름이 있는 경우에도 작동하지만 이제 매개 변수에 더 이상 파일 이름 와일드카드를 포함할 수 없습니다(예: 매개 변수를 플레이북으로 지정 .*
하는 경우 ).'.*'
모든 경우에 $1
인용해야 합니다. find
명령 내에서 자체 패턴 일치와 마찬가지로 *
따옴표로 묶어야 합니다 . 다른 경우에는 셸이 확장할 수 있도록 인용을 해제해야 합니다.find
-name
*
스크립트 내에서 또는 스크립트를 실행할 때(요구 사항의 일부인 경우) 출력을 파일로 리디렉션합니다.
위 스크립트의 모든 변형은 동일한 방식으로 호출됩니다.
./myscript.sh .txt
답변2
다음과 같이 사용할 수 있습니다. (스크립트에 전달된 매개변수의 모든 큰따옴표에 유의하세요)
#!/usr/bin/bash
first_cmd="$1"
second_cmd="$2"
$first_cmd | $second_cmd > outputfile.txt
구현하다:
$ ./temp.sh "ls -lrt" "grep '\.txt$'"
출력을 확인하십시오.
$ cat outputfile.txt
***all the filename with .txt will print