[리눅스] Bash Shell에서 파일 존재 여부 검사 시 -e와 -f 옵션의 차이

 

Bash Shell에서 파일 존재 여부 검사 시 -e와 -f 옵션을 사용할 수 있는데, -e는 단순히 파일이 존재하는지만 검사하고 -f는 해당 경로에 있는 것이 디렉토리나 마운트 된 기기 등이 아니라 정말로 파일인지까지 검사해줍니다. 보통 if문 안에서 다음과 같이 사용하게 되지요.

 

# 해당 운영체제가 우분투인지를 검사하는 코드입니다.
if [[ -f /etc/lsb-release ]];

 

참조한 곳: https://linuxize.com/post/bash-check-if-file-exists/

[펄 (Perl)] 특정 디렉토리 내의 모든 파일 리스트 출력하기


특정 디렉토리 내의 모든 파일 리스트를 재귀적으로(recursive) 출력하는 펄 함수는 다음과 같습니다.


sub process_files

{

    my $path = shift;

    opendir (DIR, $path) or die;


    my @files = map { $path . '/' . $_ } grep { !/^\.{1,2}$/ } readdir (DIR);

    my @result;

    closedir (DIR);


    for (@files)

    {

        if (-d $_) { push @result, process_files ($_); }

        else { push @result, $_; }

    }

    return @result;

}


[리눅스] 특정 디렉토리 내 파일 개수 보기


ls -l | grep ^- | wc -l


라고 치시면 현재 디렉토리 내에 있는 파일의 개수를 보실 수 있습니다.

[Git] fatal: The remote end hung up unexpectedly


git push를 했는데 fatal: The remote end hung up unexpectedly 이라는 에러 메시지가 뜰 때가 있습니다. 크기가 1MB 보다 큰 파일이 있을 경우 이 에러가 발생합니다. 이럴 때에는 git 설정에서 개별 파일의 최고 크기를 늘려주면 됩니다. 예를 들어 20MB 짜리 파일이 있다면 20MB = 20 * 1024 * 1024 = 20971520 bytes 이므로,


git config --global http.postBuffer 20971520


이라고 해 준 뒤에 다시 git push를 하시면 됩니다.


( 참고한 사이트: https://confluence.atlassian.com/bitbucketserverkb/git-push-fails-fatal-the-remote-end-hung-up-unexpectedly-779171796.html )

[리눅스] cat 사용법


cat은 연결한다는 뜻의 영단어 concatenate의 약자입니다. cat은 인자로 받은 문자열이나 파일을 다 이어붙여서 하나로 만들어서 출력합니다. 예를 들어


cat 파일1 파일2 파일3


이라고 쓰면 파일1, 파일2, 파일3의 내용이 순서대로 연결되어 화면에 출력됩니다.


이 성질을 사용해서 cat으로 파일의 내용을 볼 수 있습니다.


cat 파일1


이라고 하면 딱히 연결시킬 다른 파일이 없기 때문에 파일1의 내용만 화면에 출력됩니다.


그냥 cat이라고만 치면 키보드에서 입력을 받아서 화면에 출력합니다. 이것을 리다이렉션(>)을 사용해서 파일에 바로 저장할 수 있습니다. 입력을 마칠 때에는 새 줄의 맨 처음에서 ctrl+d를 누르시면 됩니다. 예를 들면 다음과 같습니다.


cat > 여기에저장.txt


cat에는 많은 옵션이 있습니다. 그 중 유용한 것 두 가지를 소개합니다.


-ve


-ve는 각 줄의 맽 끝을 $ 기호로 표시해주는 옵션입니다. 줄 맨 끝에 공백이 있을 경우 유용합니다.


-n


-n은 줄마다 1, 2, 3 등의 줄번호를 붙여서 출력하는 옵션입니다.


[파이썬] glob - 디렉토리 내 특정 확장자 파일 모두 출력하기


디렉토리 안에 있는 파일을 다룰 때에는 os와 os.path를 함께 사용해도 되고 glob을 사용해도 됩니다. 특정 확장자의 파일만 가져오기 위해 glob을 사용해보도록 하겠습니다. 경로를 합치기 위해 os.path도 사용했습니다.


import glob

import os.path


myPath = '/내가/원하는/디렉토리/경로'

myExt = '*.jpg' # 찾고 싶은 확장자


for a in glob.glob(os.path.join(myPath, myExt)):

    print(a)


이렇게 하면 myPath 안에 있는 jpg 확장자 파일들이 화면에 출력됩니다.

[파이썬] os와 os.path - 디렉토리 내 파일 전부 출력하기


특정 디렉토리 안에 있는 파일을 배열로 받아와야 할 때가 종종 있습니다. os와 os.path를 함께 사용해도 되고 glob을 사용해도 됩니다. 여기서는 os와 os.path를 사용해보도록 하겠습니다.


import os

import os.path


myPath = '/내가/원하는/디렉토리/경로'

files = list()


for a in os.listdir(myPath):

    fullPath = os.path.join(myPath, a) # 파일일 수도 있고 디렉토리일 수도 있습니다.

    if os.path.isfile(fullPath): # 파일이라면

        files.append(fullPath)


print(files)


이렇게 하면 myPath 안에 있는 파일들이 화면에 출력됩니다.

[리눅스] 특정 mime 형식의 파일만 출력하기 (예제: jpeg 파일만 출력)


find ./ -type f -exec file --mime-type {}  \; | awk '{if ($NF != "image/jpeg") print $0 }'


이렇게 하면 jpeg 형식의 파일만 출력됩니다. 다른 형식의 파일을 찾아보고 싶으시면 "image/jpeg" 부분을 바꾸시면 됩니다.

The processing instruction target matching "[xX][mM][lL]" is not allowed.


XML 파일이 파일 선언으로 시작되지 않을 때 나오는 오류 메시지입니다.

파일의 맨 처음 부분에 공백이나 주석이 있으면 이런 오류가 발생합니다.

+ Recent posts