저는 선택된 전체 디렉토리에 있는 모든 파일의 내용을 볼 수 있는 스크립트를 작성하고 있지만 어떻게 해야 할지 잘 모르겠습니다.
출력을 또는 ls
로 파이프하려고 하는데 작동하지 않는 것 같습니다.cat
less
사용해야 하는 명령줄 변수가 있습니까? 아니면 필요한 작업을 수행하는 명령이 있습니까?
기억나지 않는 특정 파일을 찾을 때마다 그 파일이 무엇인지 빠르게 확인할 수 있기를 바랍니다.
답변1
이것이 바로 cat
목적입니다. 디렉토리에 있는 모든 파일의 내용을 표시하려면 다음을 사용하십시오.
cat *
쉘이 *
파일 목록으로 확장됩니다. 숨겨진 파일도 포함하려면 다음을 사용하십시오.
cat * .*
또는
shopt -s dotglob; cat *
그러나 파일을 빠르게 식별하려는 경우에는 특히 파일이 매우 긴 경우에는 이것이 최선의 방법이 아닐 수 있습니다.
head
이 경우 다음을 사용하는 것이 도움이 될 수 있습니다.
head *
디렉토리에 있는 각 파일의 처음 10줄이 표시되며 헤더 줄에는 파일 이름이 표시됩니다.
답변2
바라보다"왜 `ls`를 구문 분석하지 *않나요*?"파싱된 출력이 ls
좋은 접근 방식이 아닌 이유.
스크립트의 경우:
#!/bin/sh
dir="$1"
PAGER="${PAGER:-cat}"
test -d "$dir" || exit 1
find "$dir" -type f -exec "$PAGER" {} \;
이는 첫 번째 명령줄 인수를 가져와 이를 변수에 할당합니다 dir
. 이 변수는 사용자가 아직 설정하지 않은 경우 다른 값으로 PAGER
설정됩니다 .cat
주어진 디렉토리가 유효한 디렉토리 이름이면 find
해당 디렉토리 또는 하위 디렉토리에 있는 모든 일반 파일(숨겨진 일반 파일 포함)을 호출기에 전달하는 데 사용됩니다.
파일 검색을 특정 디렉터리의 첫 번째 수준으로만 제한하려면 옵션 앞에 를 삽입하세요 -maxdepth 1
.-exec
find
그걸 써:
cat
모든 파일은 다음 위치에 있습니다/tmp
.$ ./script /tmp
홈 디렉터리에 있는 모든 파일의 처음 10줄을 확인하세요.
$ PAGER=head ./script "$HOME"
~/stories
카탈로그의 모든 스토리를 읽어보세요 :$ PAGER=less ./script "$HOME/stories"
확장하다:
#!/bin/sh
dir="$1"
suf="$2"
PAGER="${PAGER:-cat}"
test -d "$dir" || exit 1
find "$dir" -type f -name "*$suf" -exec "$PAGER" {} \;
이렇게 하면 스크립트가 추가 파일 이름 접미사를 사용할 수 있습니다.
$ ./script /tmp .txt