rm을 사용하여 단 한 번의 확인(rm -i)으로 여러 파일을 삭제하는 방법은 무엇입니까?

rm을 사용하여 단 한 번의 확인(rm -i)으로 여러 파일을 삭제하는 방법은 무엇입니까?

별칭이 있고 rm='rm -irv'여러 파일 및/또는 디렉터리를 삭제하고 싶지만 확인 메시지는 1개만 필요합니다.rm: descend into directory 'myfolder'?

모든 디렉토리를 확인하는 것은 괜찮지만 모든 디렉토리의 모든 파일을 확인하는 것은 마음에 들지 않습니다. rm *또는 zsh 기능이 제대로 작동하지만 때로는 파일 이나 개별 파일을 rm something/*삭제 하지만 여전히 최소한 1개의 확인을 원합니다.rm *.txtrm document.txt

이 솔루션 내가 찾고 있는 것과 매우 가깝지만 모든 경우에 작동하지는 않습니다. "myfolder" 디렉터리에 100개의 파일이 포함되어 있다고 가정하면 파일이 다음과 같이 표시되기를 바랍니다.

~ > ls -F
myfolder/    empty.txt    file.txt    main.c

~ > rm *
zsh: sure you want to delete all 4 files in /home/user [yn]? n

~ > rm myfolder
rm: descend into directory 'myfolder'? y
removed 'file1.txt'
removed 'file2.txt'
...
removed 'file100.txt'
removed directory 'myfolder'

~ > rm main.c
rm: remove regular file 'main.c'? y
removed 'main.c'

~> rm *.txt
rm: remove all '*.txt' files? y
removed 'empty.txt'
removed 'file.txt'

답변1

질문에 나열된 정확한 프롬프트와 출력을 얻는 것은 사실상 불가능하지만(또는 많은 작업이 필요함) 다음은 모든 실제 목적을 포괄해야 합니다.

# Disable the default prompt that says
# 'zsh: sure you want to delete all 4 files in /home/user [yn]?'
setopt rmstarsilent

# For portability, use the `zf_rm` builtin instead of any external `rm` command.
zmodload -Fa zsh/files b:zf_rm

rm() {
  # For portability, reset all options (in this function only).
  emulate -L zsh

  # Divide the files into dirs and other files.
  # $^ treats the array as a brace expansion.
  # (N) eliminates non-existing matches.
  # (-/) matches dirs, incl. symlinks pointing to dirs.
  # (-^/) matches everything else.
  # (T) appends file type markers to the file names.
  local -a dirs=( $^@(TN-/) ) files=( $^@(TN-^/) )

  # Tell the user how many dirs and files would be deleted.
  print "Sure you want to delete these $#dirs dirs and $#files files in $PWD?"

  # List the files in columns à la `ls`, dirs first.
  print -c - $dirs $files

  # Prompt the user to confirm.
  # If `y`, delete the files.
  #   -f skips any confirmation.
  #   -r recurses into directories.
  #   -s makes sure we don't accidentally the whole thing.
  # If this succeeds, print a confirmation.
  read -q "?[yn] " &&
      zf_rm -frs - $@ && 
      print -l '' "$#dirs dirs and $#files files deleted from $PWD."
}

자세한 내용은 zf_rm다음을 참조하세요.http://zsh.sourceforge.net/Doc/Release/Zsh-Modules.html#The-zsh_002files-Module

glob 한정자에 대한 자세한 내용은 (TN-^/)여기에서 확인할 수 있습니다.http://zsh.sourceforge.net/Doc/Release/Expansion.html#Glob-Qualifiers

관련 정보