ファイルをごみ箱に移動する[閉じる]

ファイルをごみ箱に移動する[閉じる]

私のコードには次の問題があります。

#!/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

  • ツールを使用してstatinode番号を取得します。
  • 直接使用してください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"

関連情報