วิธีการย้ายไฟล์ไปที่ถังขยะจากบรรทัดคำสั่ง?


129

ฉันทำงานเทอร์มินัลมากและวันนี้มีประสบการณ์ในการพิมพ์

rm fileInQuestion.txt

ก่อนที่จะค้นพบว่าฉันต้องการ fileInQuestion.txt จริง ๆ หากฉันลบใน GUI ฉันจะลบมันออกจากถังขยะ ฉันต้องการทราบว่าเป็นไปได้ที่จะโอเวอร์โหลด 'rm' ในเทอร์มินัลในลักษณะที่ส่งไฟล์ / ไฟล์ไปที่ถังขยะหรือไม่


1
มีโปรแกรมที่สามารถกู้คืนไฟล์ที่ถูกลบได้ (ตราบใดที่เซกเตอร์เหล่านั้นในฮาร์ดไดรฟ์ไม่ถูกเขียนทับในเวลาเฉลี่ย!) เมื่อสิ่งนี้เกิดขึ้นคุณควรใช้หนึ่งในนั้น ...
iconoclast

นอกจากนี้โปรดดูaskubuntu.com/q/468721/250556สำหรับผู้ใช้ Google ที่กำลังมองหาการกำจัดไฟล์ ubuntu / debian / linux
ThorSummoner

คำตอบ:


100

ฉันจะไม่แนะนำ aliasing rmเพื่อmvที่คุณอาจได้รับในนิสัยของrmไฟล์ที่ไม่ถาวรลบแล้วใช้เป็นประเด็นเกี่ยวกับคอมพิวเตอร์เครื่องอื่น ๆ หรือภายใต้บัญชีผู้ใช้อื่น ๆ เมื่อมันไม่ลบ

ผมเขียนชุดของbashสคริปที่เพิ่ม Mac OS X เหมือนเครื่องมือบรรทัดคำสั่งเพิ่มเติม (นอกเหนือจากจำนวนของคนในตัวเช่นopen, pbcopy, pbpasteฯลฯ ) trashที่สำคัญที่สุดคือ เวอร์ชันของฉันtrashจะทำทุกอย่างให้ถูกต้องซึ่ง aliasing rmจะไม่ (และหวังว่าจะไม่มีอะไรเลวร้าย แต่ฉันใช้มันใน Macs ของตัวเองมาสองสามปีแล้วโดยไม่มีข้อมูลสูญหาย) รวมถึง: การเปลี่ยนชื่อไฟล์เช่น Finder หากไฟล์ที่มีชื่อเดียวกันมีอยู่แล้วให้วางไฟล์ลงในโฟลเดอร์ถังขยะที่ถูกต้องบนไดรฟ์ข้อมูลภายนอก มันยังมีสิ่งที่เพิ่มเข้ามาอีกเช่น: มันพยายามที่จะใช้ AppleScript เมื่อมีให้คุณได้เสียงขยะที่ดีและ (แต่ไม่ต้องการมันดังนั้นคุณยังสามารถใช้มันผ่าน SSH ได้เมื่อไม่มีผู้ใช้ที่ล็อกอิน) สามารถ ให้ขนาดถังขยะในทุกวอลุ่ม

คุณสามารถคว้าของฉันชุดเครื่องมือ OSX จากเว็บไซต์ของฉันหรือรุ่นล่าสุดและยิ่งใหญ่ที่สุดจากที่เก็บ GitHub

นอกจากนี้ยังมีtrashคำสั่งที่พัฒนาโดย Ali Rantakariแต่ฉันไม่ได้ทดสอบตัวเอง


4
คำตอบที่ดีมากดีกว่าของฉัน!
user1256923

24
ฉันเคยใช้trashRantakari มาพักหนึ่งแล้วก็รับรองได้จริงๆ มันถูกคอมไพล์ด้วย Objective-C และใช้ระบบไฟล์มาตรฐาน API อย่างชาญฉลาดและถ้ามันล้มเหลว (เช่นผู้ใช้ไม่มีสิทธิ์เพียงพอ) มันจะเรียก Finder เพื่อทำการทิ้งไฟล์ คุณสามารถอ่านข้อมูลเพิ่มเติมของtrashจากhasseg.org/blog
Jari Keinänen

26
ถังขยะยังสามารถใช้ได้ผ่านผู้จัดการแพคเกจชง เพียงใช้: brew install trash.
แลนดอนคุห์

8
@ landon9720 จุดที่ดี และเพื่อชี้แจงให้คนอื่น ๆtrashคำสั่งที่ใช้งานได้ผ่านHomebrewเป็นของ Alai Rantakari (ดูbrewสูตร )
morgant

3
ผมสามารถที่จะแก้ไขข้อผิดพลาดโดยการทำงานแล้วbrew remove trash brew install trash
Elias Zamaria

99

ถังขยะbrew install trashเครื่องมือบรรทัดคำสั่งที่สามารถติดตั้งผ่านทาง

จะช่วยให้คุณกู้คืนไฟล์ที่ถูกทิ้งในถังขยะผ่านทางบรรทัดคำสั่งหรือ Finder


2
ช่างเป็นทางออกที่ดีเลิศ!
นายเป่ย

6
มีให้ใน macports:port install trash
holocronweaver

ทุกครั้งที่ฉันพยายามbrew install trashฉันจะได้รับสิ่งนี้: pastebin.com/N92cM7d8
Ben Leggiero

@ BenC.R.Leggiero ฉันจะใช้เวลาปัญหาที่ไปgithub.com/ali-rantakari/trash/issues คุณมาbrew updateก่อนไหม? ใช้งานได้ดีในตอนท้ายของฉัน
Paul Wenzel

@ PaulWenzel ใช่และดูเหมือนว่าจะปรับปรุงได้ดี ฉันจะโพสต์ปัญหา
Ben Leggiero

21

ฉันมีไฟล์ที่เรียกใช้งานได้remบางที่ใน$PATHเนื้อหาของฉัน:

แก้ไข: รหัสด้านล่างเป็นรุ่นที่ได้รับการแก้ไขและปรับปรุงโดยความร่วมมือกับDave Abrahams :

#!/usr/bin/env python
import os
import sys
import subprocess

if len(sys.argv) > 1:
    files = []
    for arg in sys.argv[1:]:
        if os.path.exists(arg):
            p = os.path.abspath(arg).replace('\\', '\\\\').replace('"', '\\"')
            files.append('the POSIX file "' + p + '"')
        else:
            sys.stderr.write(
                "%s: %s: No such file or directory\n" % (sys.argv[0], arg))
    if len(files) > 0:
        cmd = ['osascript', '-e',
               'tell app "Finder" to move {' + ', '.join(files) + '} to trash']
        r = subprocess.call(cmd, stdout=open(os.devnull, 'w'))
        sys.exit(r if len(files) == len(sys.argv[1:]) else 1)
else:
    sys.stderr.write(
        'usage: %s file(s)\n'
        '       move file(s) to Trash\n' % os.path.basename(sys.argv[0]))
    sys.exit(64) # matches what rm does on my system

มันทำงานในลักษณะเดียวกับการลบจาก Finder (ดูโพสต์บล็อกที่นี่ )


4
สิ่งนี้ควรมีคะแนนมากกว่า IMO เนื่องจากเป็น AppleScript จึงใช้กระบวนการถังขยะจริงเพื่อย้ายไฟล์ไปยังถังขยะซึ่งหมายความว่ามันจะทำงานเหมือนกันทุกประการ ความอัปยศหนึ่งซับไม่ได้อย่างไรก็ตาม
mxcl

2
คำตอบนี้เป็นบทเรียนเชิงวัตถุในการทำสิ่งที่ถูกต้อง มันทำงานร่วมกับสัญลักษณ์ตัวแทนเชลล์และทำงานผ่าน Finder มันไม่ได้สร้างใหม่ล้อใด ๆ และมันเป็นเรื่องง่ายที่สุดเท่าที่จะทำได้ ฉันใส่ไว้ใน~/binชื่อของฉันtrashและใช้งานได้เป็นครั้งแรก - ทำให้ฉันสามารถทิ้งไฟล์จำนวนมากได้อย่างมีประสิทธิภาพมากกว่าที่ฉันต้องคลิกมันใน Finder windows ขอบคุณมาก ฉันหวังว่าคุณจะโพสต์คำตอบเพิ่มเติม!
Ben Kovitz

3
รุ่นนี้จัดการคำพูด มันเปลี่ยนพฤติกรรมการจัดการข้อผิดพลาดเล็กน้อยซึ่งในรุ่นด้านบนดูเหมือนว่าจะไม่ได้ทำงานอย่างระมัดระวังมาก (ข้อผิดพลาดในการ stdout แทน stderr ไม่มีรหัสการออก) แต่ข้อผิดพลาดที่คุณได้รับosascriptเมื่อไม่มีไฟล์ ไม่สวยงามดังนั้นคุณอาจต้องการปรับแต่งส่วนนั้น
Dave Abrahams

3
งานที่ดี. รุ่นนี้รวมการเปลี่ยนแปลงเหล่านั้นและยัง (1) พยายามเลียนแบบคำสั่งเชลล์rmให้มากที่สุดเท่าที่เป็นไปได้ในแง่ของการแสดงข้อความเมื่อไม่มีไฟล์อยู่และ (2) รวมทุกอย่างไว้ในการosascriptโทรครั้งเดียว
Anthony Smith


4

ฉันพบรหัสที่ดีงามที่สามารถเพิ่มได้ในตอนท้ายโปรไฟล์แบตช์ของผู้ใช้และทำให้เกิดrmการย้ายไฟล์ไปที่ถังขยะในแต่ละครั้งที่เรียกใช้

นาโน ~ / .bash_profile

#... append at the end
function rm () {
  local path
  for path in "$@"; do
    # ignore any arguments
    if [[ "$path" = -* ]]; then :
    else
      # remove trailing slash
      local mindtrailingslash=${path%/}
      # remove preceding directory path
      local dst=${mindtrailingslash##*/}
      # append the time if necessary
      while [ -e ~/.Trash/"$dst" ]; do
        dst="`expr "$dst" : '\(.*\)\.[^.]*'` `date +%H-%M-%S`.`expr "$dst" : '.*\.\([^.]*\)'`"
      done
      mv "$path" ~/.Trash/"$dst"
    fi
  done
}

แหล่งที่มา: http://hints.macworld.com/article.php?story=20080224175659423


2
นี่คือ v ฉลาด แต่ฉันยังคงไม่แนะนำนี้ มันฉลาดเพราะอยู่ในโปรไฟล์ bash สำหรับผู้ใช้และผู้ใช้เท่านั้นที่สามารถเรียกใช้ฟังก์ชันนี้ได้โดยพิมพ์ลงสคริปต์ที่ใช้ rm จะยังคงเรียกใช้ต้นฉบับ แต่ฉันจะไม่แนะนำให้ทำเช่นนี้เพราะผู้ใช้จะคุ้นเคยกับการแสดงในลักษณะนี้เมื่อมันไม่ได้อยู่ในเครื่องอื่น ฉันจะใช้สิ่งนี้ แต่เปลี่ยนชื่อฟังก์ชั่น "ถังขยะ"
Matt Parkins

ฉันใช้ฟังก์ชั่นเดียวกันกับการเปลี่ยนแปลงสองอย่าง: ①ฉันแก้ไขข้อผิดพลาดในฟังก์ชั่นที่ทำให้โฟลเดอร์ใด ๆ ถูกเปลี่ยนชื่อเป็น timestamp ถ้าแท็บเสร็จสมบูรณ์แล้วเพื่อรวมเครื่องหมายสแลชต่อท้าย: การเปลี่ยนต่อไปนี้ บรรทัดlocal dst=${path##*/}ที่มีและใส่สายอื่นก่อนที่หนึ่งที่บอกว่าlocal dst=${mindtrailingslash##*/} ②ผมใช้ชื่อlocal mindtrailingslash=${path%/} function rrเช่นนี้จะไม่รบกวนด้วยธรรมดาrmแต่ชื่อสั้นและคล้ายกันอย่างรวดเร็วในการพิมพ์ (ชื่ออื่น ๆ จะทำ)
mach

เปลี่ยนชื่อrm()เป็นrmt()- วิธีนี้คุณยังคงสามารถใช้rmคำสั่งเมื่อคุณต้องการ ฉันคิดว่าฉันอยู่ในหัวของฉันเป็นremove to trash: D
James111

4

ใช้ osascript คำสั่ง terminal, ตัวแปล AppleScript

osascript -e "tell application \"Finder\" to delete POSIX file \"${PWD}/${InputFile}\""

สิ่งนี้บอกให้ AppleScript บอก Finder ให้ส่งไฟล์ไปที่ถังขยะ

จำเป็นต้องใช้ PWD สำหรับพา ธ ของไฟล์ที่เกี่ยวข้องเนื่องจาก AppleScript จัดการได้ไม่ดี


1
ง่ายมีประสิทธิภาพและไม่จำเป็นต้องติดตั้งอะไร! ดี
SilverWolf

2

วิธีการที่ทันสมัยโดยใช้อย่างรวดเร็ว

https://github.com/reklis/recycle

//
// main.swift
// recycle
//
// usage: recycle <files or directories to throw out>
//

import Foundation
import AppKit

var args = NSProcessInfo.processInfo().arguments
args.removeAtIndex(0) // first item in list is the program itself

var w = NSWorkspace.sharedWorkspace()
var fm = NSFileManager.defaultManager()

for arg in args {
    let path = arg.stringByStandardizingPath;
    let file = path.lastPathComponent
    let source = path.stringByDeletingLastPathComponent

    w.performFileOperation(NSWorkspaceRecycleOperation,
        source:source,
        destination: "",
        files: [file],
        tag: nil)
}

1
แม้ว่าลิงก์นี้อาจตอบคำถามได้ดีกว่าหากรวมส่วนสำคัญของคำตอบไว้ที่นี่และให้ลิงก์สำหรับการอ้างอิง คำตอบสำหรับลิงก์เท่านั้นอาจไม่ถูกต้องหากหน้าเว็บที่เชื่อมโยงมีการเปลี่ยนแปลง
jherran

@ jherran ขอบคุณสำหรับการเตือนฉันเพิ่มส่วนรหัส
slf

นี่คือคำตอบที่ฉันต้องการเพราะใช้ลอจิกพื้นฐานและ API แบบเดียวกับ GUI
Jason R. Coombs

1
ตอนนี้ถ้ามีเพียงรุ่น Python เท่านั้นที่หลีกเลี่ยงความต้องการไบนารี 3MB เพื่อทำการเรียกระบบเพียงครั้งเดียว
Jason R. Coombs

1

ในขณะที่เป็นไปได้ที่จะrmย้ายไฟล์ไปที่ถังขยะแทนที่จะลบพวกเขาฉันจะแนะนำให้นำแนวคิดของเครือข่ายความปลอดภัยของอินเทอร์เฟซผู้ใช้แบบกราฟิกไปยังเชลล์ UNIX มีหลายวิธีในการทำความเสียหายอย่างร้ายแรงโดยใช้เครื่อง คำแนะนำที่ดีที่สุดสำหรับ IMHO คือการคิดสองครั้งก่อนกดปุ่มenterในหน้าต่างเชลล์

หากคุณต้องการrmเตือนคุณว่าคุณกำลังจะลบไฟล์ให้พิจารณาใช้นามแฝงต่อไปนี้ (สำหรับ/bin/bashใส่บรรทัดนี้.bashrcในโฮมไดเร็กตอรี่ของคุณ):

alias rm "rm -i"

สิ่งนี้จะทำการrmยืนยันคำขอก่อนที่จะพยายามลบแต่ละไฟล์

หากคุณใช้งาน TimeMachine (ฉันหวังว่าจะเป็นเช่นนั้น!) คุณสามารถรับไฟล์จากการสำรองข้อมูลได้ตลอดเวลา วิธีนี้คุณสามารถทำงานได้ไม่เกินหนึ่งชั่วโมง แน่นอนว่าไม่ดีพอ ดังนั้นคิดอีกครั้งก่อนกดปุ่มนั้นenter!


1
อย่าทำมัน! สคริปต์การติดตั้งอาจจะใช้และแขวนกับนามแฝงrm rm -i
โปรเก่า

3
@OldPro: .bashrcจะดำเนินการก็ต่อเมื่อเชลล์เป็นแบบโต้ตอบ ตรวจสอบหน้าคน !
Mackie Messer

ฉันอยากจะแนะนำให้ถอดมุ้งปลอดภัยหรือตักเตือนผู้อื่นให้ทำ
the0ther

ฉันจะไปเทียบกับพวกนักเลงและบอกว่าฉันใช้กลอุบายนี้เพื่อผลที่ยอดเยี่ยม สองอย่างที่ไม่ได้กล่าวถึงคือมันฝึกสมองของคุณให้rmปลอดภัยกว่าซึ่งจะทำให้คุณเดือดร้อนในระบบอื่น นอกจากนี้ถ้าคุณใช้-f, -iถูกละเว้นสมบูรณ์ ที่กล่าวมานี้เป็นเครือข่ายความปลอดภัยที่ดี หนึ่งที่ดีคือการไม่เคยใช้rmในความโปรดปรานของrmiนามแฝง ( alias rmi="rm -i") หรือที่ยอดเยี่ยมtrashยูทิลิตี้ นอกจากนี้ฉันจะเพิ่มที่ทุกคนควรใส่ไว้[ -f ~/.bashrc ] && source ~/.bashrcใน.bash_profileตอนนี้
mattmc3

1

มีสองยูทิลิตี้ที่ติดตั้งได้ผ่านHomebrewที่สามารถทำสิ่งนี้ได้:

  1. ขยะ

    นี่เป็นโปรแกรมบรรทัดคำสั่งขนาดเล็กสำหรับ OS X ที่ย้ายไฟล์หรือโฟลเดอร์ไปที่ถังขยะ USP ของคำสั่งนี้ช่วยให้สามารถกู้คืนไฟล์ได้อย่างง่ายดาย คำสั่งสำหรับถังขยะไฟล์ / โฟลเดอร์นั้นไม่มีประโยชน์หากคุณไม่สามารถกู้คืนไฟล์ / โฟลเดอร์ได้หลังจากทิ้งขยะ จากเว็บไซต์ของคำสั่ง:

ตามค่าเริ่มต้นถังขยะจะขอให้ Finder ย้ายไฟล์ / โฟลเดอร์ที่ระบุไปยังถังขยะแทนที่จะเรียก API ของระบบให้ทำเช่นนี้เพราะคุณสมบัติ "ใส่กลับ" ที่ใช้งานได้เมื่อทำการทิ้งไฟล์ผ่าน Finder เท่านั้น


-F

ขอให้ Finder ค้นหาย้ายไฟล์ไปที่ถังขยะแทนที่จะใช้ระบบ API สิ่งนี้ช้ากว่า แต่ใช้ประโยชน์จาก Finder's UI (เช่นเสียง) และทำให้มั่นใจได้ว่าคุณสมบัติ "นำกลับมา" ใช้งานได้

-l

แสดงรายการปัจจุบันในถังขยะ หากมีการใช้อาร์กิวเมนต์นี้ไม่จำเป็นต้องระบุไฟล์ใด ๆ

-e

เอาขยะไปทิ้ง. ถังขยะขอให้ยืนยันก่อนที่จะดำเนินการนี้ หากมีการใช้อาร์กิวเมนต์นี้ไม่จำเป็นต้องระบุไฟล์ใด ๆ

ในการติดตั้งให้trashรันสิ่งต่อไปนี้ในเทอร์มินัล:

brew install trash.


  1. rmtrash

    เครื่องมือบรรทัดคำสั่งที่ย้ายไฟล์ไปที่ถังขยะ จากหน้าคำสั่งของมนุษย์:

คำสั่งนี้ย้ายไฟล์ไปที่ถังขยะแทนที่จะลบไฟล์ทั้งหมดออกจากระบบไฟล์ มีประโยชน์มากถ้าคุณต้องการไฟล์นั้น ...


-u USERNAME

อาร์กิวเมนต์ตัวเลือก นี่จะย้ายไฟล์ไปที่ถังขยะของผู้ใช้ที่ระบุ โปรดทราบว่าคุณต้องมีสิทธิ์เพียงพอที่จะทำสิ่งนี้ให้สำเร็จ

ในการติดตั้งให้rmtrashรันสิ่งต่อไปนี้ในเทอร์มินัล:

brew install rmtrash.


1

ต่อไปนี้เป็นโซลูชันบรรทัดเดียวที่น่าสนใจเพื่อเพิ่มในโปรไฟล์ bash ของคุณ โปรดทราบว่ามันจะเขียนทับสิ่งที่มีชื่อเดียวกันในถังขยะแล้ว

trash() { mv -fv "$@" ~/.Trash/ ; }

การใช้งาน:

 ~/Desktop $$$ touch a b c
 ~/Desktop $$$ ls
a b c
 ~/Desktop $$$ trash a b c
a -> /Users/ryan.tuck/.Trash/a
b -> /Users/ryan.tuck/.Trash/b
c -> /Users/ryan.tuck/.Trash/c
 ~/Desktop $$$ ls
 ~/Desktop $$$

ได้แก้ไขตาม - ขอบคุณสำหรับการป้อนข้อมูล!
Ryan Tuck

0

ถูกต้อง trashing สิ่ง (เพื่อที่จะได้รับคืนแน่นอน) เป็น trickier กว่าเพียงเพื่อmv~/.Trash

osx-trashอาจเป็นสิ่งที่คุณกำลังมองหา ( Caveat emptor - ฉันไม่ได้ลองและไม่สามารถรับรองได้ว่าปลอดภัยแค่ไหน)


0

trash-cliตรวจสอบ มันทำงานข้ามแพลตฟอร์มไม่มีเสียงถังขยะและรองรับการใส่กลับ

คุณสามารถติดตั้งได้ด้วย(ต้องใช้Node.js ) :

$ npm install --global trash-cli

อีกทางเลือกหนึ่งถ้าคุณไม่ต้องการใช้ Node.js คุณสามารถติดตั้งไบนารีดั้งเดิมได้osx-trashด้วยตนเอง


-1

ใน. bashrc ของคุณ (หรือที่ใดก็ตามที่คุณเก็บพารามิเตอร์สำหรับเชลล์ของคุณ) ลองเพิ่มนามแฝงที่เปลี่ยนพฤติกรรมของ rm เพื่อย้ายเนื้อหาไปยัง ~ / .Trash เช่นเดียวกับใน:

alias rm='move/to/.Trash'

นามแฝงนี้หากห่างไกลจากสิ่งเล็กน้อยที่จะใช้ (อย่างน้อยสำหรับฉัน) แม้ว่าเนื่องจากการใช้ mv (ผู้สมัครที่สำคัญที่จะใช้สำหรับงานนี้) คือ

mv file where

ดังนั้นการมีนามแฝงที่ทำให้ส่วน 'Where' อยู่ข้างหน้าไฟล์ถูกย้ายอาจเป็นภาพร่างที่ค่อนข้างสวย ฉันจะดูมันและอาจได้รับคำแนะนำที่สำคัญกว่านี้

แก้ไข: ฉันเพิ่งลองเพิ่มต่อไปนี้ใน. bashrc ของฉันและทำงานได้:

function trash { mv "$@" ~/.Trash ; }

มันมีความดั้งเดิมมากกว่าคำแนะนำอื่น ๆ แต่คุณหลีกเลี่ยงการติดตั้งสิ่งใหม่ ๆ


3
การใช้นามแฝงrmกับสิ่งใดเป็นอันตรายเพราะอาจทำให้สคริปต์ตัวติดตั้งเสียหายได้ ฉันได้เรียนรู้วิธีนี้อย่างหนักเมื่อฉันอ้างrmถึงrm -iและติดตั้งแฮงค์
โปรเก่า

@Old Pro นั่นเป็นชื่อแทนที่ฉันใช้สำหรับ rm ในคอมพิวเตอร์ทุกเครื่องของฉันตั้งแต่วันที่ 0 และฉันไม่เคยมีปัญหาเพราะมัน สนใจที่จะให้ตัวอย่าง?
user1256923

3
@OldPro: .bashrcใช้สำหรับเชลล์แบบโต้ตอบเท่านั้น หากคุณเรียกใช้./install.shกระบวนการใหม่เริ่มต้นและนามแฝงจะไม่ทำงาน อย่างไรก็ตามหากคุณเรียกใช้. install.shกระบวนการปัจจุบันของคุณจะเรียกใช้งานตัวติดตั้งและนามแฝงจะทำงาน RTFM ...
Mackie Messer

3
จากนั้นตัวติดตั้งกำลังเรียกใช้เชลล์แบบโต้ตอบดังนั้นจึงเกิดข้อผิดพลาดอย่างรุนแรง หนึ่งตัวติดตั้งที่ใช้งานไม่ได้นั้นมีเหตุผลเพียงพอที่จะให้คำแนะนำกับชื่อแทนเชลล์โดยทั่วไป YMMV
Mackie Messer

1
อย่างไรก็ตามมันเป็นคำแนะนำที่ดีที่จะไม่ใช้rmคำสั่งแทนนามแฝงตามที่ morgant กล่าวเพราะคุณจะคุ้นเคยกับการrmไม่ลบไฟล์จริง ๆ และจากนั้นอาจเผลอลบบางอย่างในระบบที่ไม่มีการเพิ่มนามแฝงดังกล่าว นอกจากนี้การย้ายไฟล์ไปที่ถังขยะนั้นไม่ง่ายอย่างที่mv {} ~/.Trashคิด หากไฟล์อยู่ในโวลุ่มแยกต่างหากเช่นนี้จะเป็นการคัดลอกไฟล์ไปยังโฮมไดเร็กตอรี่ของคุณและลบไฟล์ต้นฉบับ
Josh

-1

ฉันเพิ่งวางสคริปต์นี้

#!/bin/bash
application=$(basename "$0")
if [ "$#" == 0 ]; then
    echo "Usage: $application path [paths...]"
    exit 1
fi
trashdir="/Users/${USER}/.Trash"
while (( "$#" )); do
    if [ -e "$1" ]; then
        src=$(basename "$1")
        dst=$src
        while [ -e "$trashdir/$dst" ]; do
            dst=$src+`date +%H-%M-%S`
        done
        mv -f "$1" "$trashdir/$dst"
    else
        echo "$1" does not exist.
    fi
    shift
done

ใน~/bin/trashทำให้ไม่สามารถเปลี่ยนแปลงchmod +x ~/bin/trashได้และเพิ่มบรรทัดต่อไปนี้ลงใน~/.bash_profile

PATH=$PATH:$HOME/bin

จากนั้นหนึ่งสามารถใช้เป็น

$ trash broken.js olddir cleanup.*

-2

ฟังก์ชั่นง่าย ๆ ช่วยให้คุณสามารถทิ้งไฟล์โดยการย้ายไปยังโฟลเดอร์. ถังขยะของผู้ใช้:

trash() {
   mv $1 ~/.Trash
}

? ทำไมคะแนนลบ นี่จะเป็นความคิดของฉันเช่นกัน ..
27432

คุณอาจจะต้อง$*แทนแต่แล้วคุณจะจบลงด้วยคำตอบเดียวกับ$1 mv "$@" ~/.Trashทำไมผู้คนถึงลงคะแนนในเชิงลบตรวจสอบความคิดเห็นจากคำตอบอื่น ๆ
kenorb

ระวังด้วยนามแฝงนี้ มันจะทำงานได้ถ้าคุณมีพาร์ติชั่นหรือไดรฟ์เพียงตัวเดียว หากคุณกำลังทำงานบนโวลุ่มที่สองหรือเครือข่ายที่ใช้ร่วมกันสิ่งนี้จะคัดลอกไฟล์ไปยังถังขยะของไดเรกทอรีบ้านของคุณซึ่งอาจไม่ใช่สิ่งที่คุณต้องการทำ!
jmk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.