함수를 사용하지 않고 휴지통 기능 만들기

함수를 사용하지 않고 휴지통 기능 만들기

저는 오래된 Linux 학습 프로젝트를 진행 중이며 작업 중 하나가 아래에 설명되어 있습니다.

"파일을 .Trash라는 디렉토리로 이동하여 영구 삭제로부터 파일을 보호하는 별칭을 만듭니다. 30일보다 오래된 .Trash의 내용을 주기적으로 삭제하도록 crontab에 대한 명령을 만듭니다(디렉토리인 경우에도)."

이 작업을 수행하려면 alias cli 명령을 사용할 것으로 예상했습니다. 함수를 사용하거나 입력을 허용하는 작은 스크립트를 작성할 수 없습니다.

우선 이게 가능한가요? 책에 나와있으니까 그럴 것 같아요. 둘째, 어디서부터 시작해야 할까요? 이 중 일부는 분명합니다. .Trash 디렉토리를 만들었고 rm 대신 별칭을 사용하는 개념을 이해할 수 있지만 이를 수행하기 위해 별칭에 어떤 cli 작업을 넣을 수 있습니까?

Alias trash=mv xxx .trash xxx

위의 경우 사용자 입력 또는 변수 정보가 필요합니다. 여기서 내가 보지 못하는 것은 무엇입니까?

답변1

Linux이기 때문에 GNU를 mv사용할 수 있다고 가정합니다. -t이동해야 하는 경로 이름 앞에 대상 디렉터리를 지정할 수 있는 옵션이 있습니다 .

따라서 간단한 사항은 다음과 같습니다.

alias trash='mkdir -p "$HOME/.trash" && mv -b -t "$HOME/.trash"'

trash그러면 대신 사용할 수 있는 별칭이 생성됩니다 rm(그러나 실제로는 어떤 옵션도 허용되지 않습니다 rm). 당신이 사용할 때

trash thisfile thatdir

실제로 구현된 것은

mkdir -p "$HOME/.trash" && mv -b -t "$HOME/.trash" thisfile thatdir

또한 이 별칭은 휴지통 디렉터리가 아직 존재하지 않거나 삭제된 경우 홈 디렉터리에 휴지통 디렉터리를 생성합니다. 또한 동일한 이름의 파일이 이미 존재하는 경우 mv -b(또 다른 GNU 전용 플래그)를 사용하여 휴지통 폴더에 백업을 생성합니다.mv

이 휴지통 디렉터리에서 오래된 항목을 정리하는 크론 작업은 다음과 같은 작업을 수행합니다.

find "$HOME/.trash" -mindepth 1 -ctime +30 -delete 2>/dev/null

이렇게 하면 30일이 지난 모든 콘텐츠가 삭제되고 디렉터리 자체에 스팸이 발송되는 것을 방지할 수 있습니다. 디렉토리는 모든 내용이 사라질 때까지 삭제되지 않습니다.

관련 정보