X-Loop: help-debbugs@HIDDEN Subject: bug#37686: Feature request: flag to not remove any files if any argument doesn't exist or is a directory Resent-From: Mark Friedenbach <mark@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-coreutils@HIDDEN Resent-Date: Wed, 09 Oct 2019 21:59:02 +0000 Resent-Message-ID: <handler.37686.B.157065829513111 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: report 37686 X-GNU-PR-Package: coreutils X-GNU-PR-Keywords: To: 37686 <at> debbugs.gnu.org X-Debbugs-Original-To: bug-coreutils@HIDDEN Received: via spool by submit <at> debbugs.gnu.org id=B.157065829513111 (code B ref -1); Wed, 09 Oct 2019 21:59:02 +0000 Received: (at submit) by debbugs.gnu.org; 9 Oct 2019 21:58:15 +0000 Received: from localhost ([127.0.0.1]:54318 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1iIJyF-0003PI-VG for submit <at> debbugs.gnu.org; Wed, 09 Oct 2019 17:58:15 -0400 Received: from lists.gnu.org ([209.51.188.17]:38789) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <mark@HIDDEN>) id 1iIJ6C-00085J-O8 for submit <at> debbugs.gnu.org; Wed, 09 Oct 2019 17:02:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43270) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from <mark@HIDDEN>) id 1iIJ6A-0004Im-Kl for bug-coreutils@HIDDEN; Wed, 09 Oct 2019 17:02:19 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50 autolearn=disabled version=3.3.2 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from <mark@HIDDEN>) id 1iIJ66-0005Xw-VA for bug-coreutils@HIDDEN; Wed, 09 Oct 2019 17:02:16 -0400 Received: from mail-oi1-x231.google.com ([2607:f8b0:4864:20::231]:32931) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from <mark@HIDDEN>) id 1iIJ66-0005Vt-Hu for bug-coreutils@HIDDEN; Wed, 09 Oct 2019 17:02:14 -0400 Received: by mail-oi1-x231.google.com with SMTP id a15so3030581oic.0 for <bug-coreutils@HIDDEN>; Wed, 09 Oct 2019 14:02:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=friedenbach-org.20150623.gappssmtp.com; s=20150623; h=mime-version:from:date:message-id:subject:to; bh=fjAQ7VWIV0AheGkaeLI0QlSV1pZSoRBjZZub/xjSrG8=; b=N4wJEIYuWMnRi2oSxE85S+X3Or8H797Z5xIoPB/9dX/ouLl6xG0R95XtOUBLvXP++9 pBhbC6hWbM0g0ODVWhW0gEoh+IIIgp/neomn/JGjdFITMYDLiLnSOYwfPQJmN6DcdBaL 7h5aVejy2moxd4NDAT+9PiVNASZ1aNLGMUem1bOw4qnE5bSnNpC0EQuG3B2MrtHrOmYO RQlqRVtbRSMG/by6M7+IFQx8ervrSbLbRFMpEyx1LMD1JXnnGnm2uyBTYJybPvvDgLgB g+b0gY2ZbXc0hEjw3m+v75YKhqwnb3jiUcCJ2gNqmq4J7dThOYxxJASNj7M2CXQJ/J1s TwBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=fjAQ7VWIV0AheGkaeLI0QlSV1pZSoRBjZZub/xjSrG8=; b=Ib+ICK9KQqFYtZKIybFqx/CmbYptf6e3mwkh9H2sYZkaXh0NSedvte9QuzrTa5wkOl qwlDUh1dmBHNMs7YfRlmkNLwRWQZVdovAEUQtOcURrUEcwxRcQ9dIMDvO5taefwhbwDn 9DWnSwIdbeaj/EWfkznirkUz9jWIlPc+0wJkXEt3ycXOEC1HNMlWgAomJL4QrunxFY2w v2cgMGPahN2U30LPbGUK9b+l4HyJK085eP3zYVqtrDwjCBDEClZxkJ5YJkeS6zFYZQaE xb1hfn+J5N5H+EW5pKnYHHZT0Ziun8AvbxfPJ0d7ZW2UWSde56DuwEK8Y4v6bjpx4irE qYnw== X-Gm-Message-State: APjAAAUjY3G4hnxuWgAM0IkacGCjmyk4zr7ZuAFyqFeZQNexyD1Y8lC0 kWPmohX/5/kwRVj5I3QpRGTpPo7iYyqTeKWsWH5TRh2GTsQ= X-Google-Smtp-Source: APXvYqy/8LMdBkGuqoPCEpANHVur7yT7650U9J6kKneBapnkXe1ED0WCvZ7f7cxSSyV41NrNYl1MLDl7jIirp3+WfxI= X-Received: by 2002:a54:4e83:: with SMTP id c3mr4317884oiy.170.1570654928165; Wed, 09 Oct 2019 14:02:08 -0700 (PDT) MIME-Version: 1.0 From: Mark Friedenbach <mark@HIDDEN> Date: Wed, 9 Oct 2019 14:01:57 -0700 Message-ID: <CAOG=w-ue4=KnNPGyegGpkZ-F7x1aO1c-YhmMgRjuqgZBTLp6BQ@HIDDEN> Content-Type: text/plain; charset="UTF-8" X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::231 X-Spam-Score: -2.3 (--) X-Mailman-Approved-At: Wed, 09 Oct 2019 17:58:11 -0400 X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) I have a persistent problem that has caused me serious trouble in the past: I mixup 'rm' and 'mv'. I suspect this is because on my keyboard they are typed with the same fingers and muscle memory kicks in, especially if I just typed the other command recently. In any case something like "mv oldname newname" can be easily undone, but "rm oldname newname" cannot. On my version of coreutils "rm oldname newname" will report: rm: cannot remove 'newname': No such file or directory ...but it deletes "newname" anyway! The same goes for trying to move a file into a directory, "rm filename dirname" which reports: rm: cannot remove 'dirname': Is a directory ...after deleting "filename". I have lost data on multiple occasions this way. Today I went searching for an argument to add to 'rm' via an alias to prevent this behavior and was very surprised to find there is none. There ought to be an option for GNU rm, let's call it '-n' or '--no-clobber' but it could be named differently, which makes rm's behavior all-or-nothing. If any errors which can be checked for upfront are encountered (named file does not exist, file name specifies a directory, etc.) then it aborts without doing anything. Thus the expected behavior would be: $ alias rm='rm -n' $ ls $ touch filename $ ls filename $ rm filename newname rm: cannot remove 'newname': No such file or directory rm: aborting $ ls filename $ mkdir dirname dirname filename $ rm filename dirname rm: cannot remove 'dirname': Is a directory rm: aborting $ ls dirname filename $ rm -f filename dirname rm: cannot remove 'dirname': Is a directory $ ls dirname filename Adding '-f' / '--force' overrides this option: $ ls dirname filename $ rm -f filename dirname rm: cannot remove 'dirname': Is a directory $ ls dirname $ rm -rf filename dirname rm: cannot remove 'filename': No such file or directory $ ls $
Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) Content-Type: text/plain; charset=utf-8 X-Loop: help-debbugs@HIDDEN From: help-debbugs@HIDDEN (GNU bug Tracking System) To: Mark Friedenbach <mark@HIDDEN> Subject: bug#37686: Acknowledgement (Feature request: flag to not remove any files if any argument doesn't exist or is a directory) Message-ID: <handler.37686.B.157065829513111.ack <at> debbugs.gnu.org> References: <CAOG=w-ue4=KnNPGyegGpkZ-F7x1aO1c-YhmMgRjuqgZBTLp6BQ@HIDDEN> X-Gnu-PR-Message: ack 37686 X-Gnu-PR-Package: coreutils Reply-To: 37686 <at> debbugs.gnu.org Date: Wed, 09 Oct 2019 21:59:02 +0000 Thank you for filing a new bug report with debbugs.gnu.org. This is an automatically generated reply to let you know your message has been received. Your message is being forwarded to the package maintainers and other interested parties for their attention; they will reply in due course. Your message has been sent to the package maintainer(s): bug-coreutils@HIDDEN If you wish to submit further information on this problem, please send it to 37686 <at> debbugs.gnu.org. Please do not send mail to help-debbugs@HIDDEN unless you wish to report a problem with the Bug-tracking system. --=20 37686: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D37686 GNU Bug Tracking System Contact help-debbugs@HIDDEN with problems
X-Loop: help-debbugs@HIDDEN Subject: bug#37686: Feature request: flag to not remove any files if any argument doesn't exist or is a directory Resent-From: L A Walsh <coreutils@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-coreutils@HIDDEN Resent-Date: Mon, 14 Oct 2019 19:36:02 +0000 Resent-Message-ID: <handler.37686.B37686.157108171826558 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 37686 X-GNU-PR-Package: coreutils X-GNU-PR-Keywords: To: Mark Friedenbach <mark@HIDDEN> Cc: 37686 <at> debbugs.gnu.org Received: via spool by 37686-submit <at> debbugs.gnu.org id=B37686.157108171826558 (code B ref 37686); Mon, 14 Oct 2019 19:36:02 +0000 Received: (at 37686) by debbugs.gnu.org; 14 Oct 2019 19:35:18 +0000 Received: from localhost ([127.0.0.1]:41725 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1iK67i-0006uI-96 for submit <at> debbugs.gnu.org; Mon, 14 Oct 2019 15:35:18 -0400 Received: from ishtar.tlinx.org ([173.164.175.65]:56794 helo=Ishtar.sc.tlinx.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <coreutils@HIDDEN>) id 1iK67g-0006u5-LN for 37686 <at> debbugs.gnu.org; Mon, 14 Oct 2019 15:35:17 -0400 Received: from [192.168.3.12] (Athenae [192.168.3.12]) by Ishtar.sc.tlinx.org (8.14.7/8.14.4/SuSE Linux 0.8) with ESMTP id x9EJZBQs055088; Mon, 14 Oct 2019 12:35:13 -0700 Message-ID: <5DA4CDEF.2070801@HIDDEN> Date: Mon, 14 Oct 2019 12:35:11 -0700 From: L A Walsh <coreutils@HIDDEN> User-Agent: Thunderbird MIME-Version: 1.0 References: <CAOG=w-ue4=KnNPGyegGpkZ-F7x1aO1c-YhmMgRjuqgZBTLp6BQ@HIDDEN> In-Reply-To: <CAOG=w-ue4=KnNPGyegGpkZ-F7x1aO1c-YhmMgRjuqgZBTLp6BQ@HIDDEN> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Score: 0.4 (/) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) On 2019/10/09 14:01, Mark Friedenbach wrote: > I have a persistent problem that has caused me serious trouble in the > past: I mixup 'rm' and 'mv'. I suspect this is because on my keyboard > they are typed with the same fingers and muscle memory kicks in, > especially if I just typed the other command recently. > rm () { if [[ -t 0 ]]; then echo >&2 Disallowed;return 1; fi command "$FUNCNAME" "$@" } mv () { if [[ -t 0 ]]; then echo >&2 Disallowed;return 1; fi command "$FUNCNAME" "$@" } alias move='</dev/null mv' alias remove='</dev/null rm' How about something _like_ the above (spur of the moment idea, written in 'bash'... Interactively, you type 'move' or 'remove' (or whatever you want to name them). But scripts you run won't be affected. Might have to adjust for your use case, but might protect against most cases. Nightly backups also help prevent catastrophic problems. At the same time, with functions or aliases, you could test for the existence of the arguments before actually executing them.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.