내 코드에 다음과 같은 문제가 있습니다.
#!/bin/bash
#Removing Files into the Recycle Bin(Deleted Directory)
filemove=$1 #Saving the first argument as "filemove"
mkdir -p ~/deleted #Create the deleted directory if it doesn't exist
mv $filemove ~/deleted #Moves the file
다음 형식을 따르려면 휴지통에 파일이 필요합니다 filename_inode
.
답변1
- 도구를 사용하여
stat
inode 번호를 가져옵니다. - 직접 사용하십시오
mv
. - 파일 이름(!!)을 인용하십시오(예
"$filemove"
: never$filemove
). - 이동하기 전에 몇 가지 안전 점검을 추가하세요.
[ ! -e "$target" ] && mv ...
set -euo pipefail
스크립트 시작 부분에 사용되므로 오류가 발생하면 실패합니다.for f in "$@"; do ... done
루프를 사용하면 여러 파일을 인수로 사용할 수 있습니다.- 다시 말하지만, 파일 이름(!!)을 인용하세요.
- 기성 솔루션을 사용하는 것이 더 좋습니다. 예를 들면 다음과 같습니다.
#!/bin/bash
# Removing Files into the Recycle Bin (Deleted Directory)
set -euo pipefail #make script exit on any error
mkdir -p "$HOME/deleted"
dest="$HOME/deleted/${1}_$(stat --format %i "$1")"
# check if file exists, and if not, do the move!
[ -e "$dest" ] && echo "Target exists, not moving: $1" || mv "$1" "$dest"
다음과 같은 것을 사용 trash file1
하거나 trash "file with spaces"
( trash
스크립트 이름이라고 가정하면...)
또는 한 번에 여러 파일을 삭제할 수도 있습니다.
#!/bin/bash
# Removing Files into the Recycle Bin (Deleted Directory)
set -euo pipefail #make script exit on any error
mkdir -p "$HOME/deleted"
for f in "$@"; do
dest="$HOME/deleted/${f}_$(stat --format %i "$f")"
# check if file exists, and if not, do the move!
[ -e "$dest" ] && echo "Target exists, skipped moving: $f" || mv "$f" "$dest"
done
다음과 같은 것을 사용하십시오trash file1 file2 "file with spaces"