최근 수정된 파일 삭제

최근 수정된 파일 삭제

나는 두 개의 파일을 만들었습니다: sample.txtsample.txt (두 번째 파일에는 공백과 같은 숨겨진 문자가 포함되어 있습니다). 가장 최근에 수정된 파일을 삭제하는 방법은 무엇입니까? 저는 리눅스를 사용하고 있습니다.

답변1

stat이 레시피의 주요 성분입니다. echo작동 방식이 만족스러우면 제거하세요.

echo rm "$(stat -c "%Y:%n" * | sort -t: -n | tail -1 | cut -d: -f2-)"

플랫폼을 지정할 필요가 없습니다. 이는 Linux 및 GNU 도구입니다.

파일 이름에 개행 문자가 포함되어 있으면 이 방법이 작동하지 않습니다.

답변2

현재 디렉터리의 최신 파일을 삭제하는 간단하고 안정적인 방법은 다음과 같습니다.

zsh -c 'rm ./*(om[1])'

물론, zsh를 실행하고 있다면 그것은 단지

rm ./*(om[1])

이 스레드에서 제안된 다른 솔루션과 달리출력 구문 분석ls또는~의stat, 이는 파일 이름에 포함된 이상한 문자, 인쇄할 수 없는 문자, 심지어 개행 문자라도 상관없이 작동합니다.

그 뒤의 괄호 안의 문자는 다음 *과 같습니다.글로벌 예선. om수정 시간(가장 최근 파일부터)으로 정렬한다는 의미이며, [1]정렬 후 첫 번째 파일만 선택한다는 의미입니다.

특정 파일을 삭제하려는 경우 수정 시간에 의존하는 것은 복잡한 접근 방식입니다. 대신 rm Space Tab올바른 파일을 찾을 때까지 셸에서 제공하는 완성 항목을 입력하고 찾아보세요.

답변3

이름이 지정된 디렉토리에서 최신 파일을 삭제 dir하고 파일 이름에 개행 문자가 포함되어 있지 않은 경우 다음을 수행하십시오.

rm -i -- "$(LC_CTYPE=C ls -t dir | head -1)"

파일 이름에 인쇄할 수 없는 문자가 포함되어 있으면 ls인쇄할 수 없는 문자가 손상될 수 있으므로 이 방법이 작동하지 않을 수 있습니다.

해당 디렉터리의 최신 파일이 다른 디렉터리인 경우 다음과 같은 오류가 발생합니다 rm: cannot remove ‘dir2’: Is a directory.

답변4

이것은 이 유틸리티에 의존하는 쉘 함수입니다 stat. 선택적 디렉토리 인수(기본값은 현재 디렉토리)를 사용하여 호출 하면 가장 오래된 파일의 상호 작용을 .수행합니다 . rm일부 경고를 무시하려면 -i플래그를 로 이동하세요 rm. 의도적으로 디렉터리를 건너뛰므로 특정 디렉터리의 파일만 조사됩니다. 빈 디렉터리를 깔끔하게 처리하기 위해 몇 가지 해결 방법을 추가했습니다 shopt. 그러나 이는 이름에 공백과 개행 문자가 포함된 파일을 처리해야 하며 처리할 수 있습니다.

function rmoldest {
  shoptnow=$(shopt -p nullglob)
  shopt -s nullglob
  tstamp=$(date +%s)
  file=
  dir=$1
  dir=${dir:-.}

  for f in "$dir"/*
  do
    if [ ! -d "$f" ]
    then
      y=$(stat -c "%Y" "$f")
      if [ $y -lt $tstamp ]
      then
        file="$f"
        tstamp=$y
      fi
    fi
  done
  $shoptnow
  if [ -n "$file" ]
  then
    /bin/rm -i "$file"
  fi
}

다음은 샘플 실행입니다(주요 내용 $은 쉘 프롬프트이므로 입력하지 마세요).

$ touch sample.txt; sleep 1; touch 'sample.txt '

$ ls -l
total 0
-rw-r--r-- 1 Jeff None 0 Mar 21 22:02 sample.txt
-rw-r--r-- 1 Jeff None 0 Mar 21 22:02 sample.txt

$ rmoldest
/bin/rm: remove regular empty file ‘./sample.txt’? y

$ ls -l
total 0
-rw-r--r-- 1 Jeff None 0 Mar 21 22:02 sample.txt

$ rmoldest
/bin/rm: remove regular empty file ‘./sample.txt ’? y

$ ls -l
total 0

관련 정보