#!/bin/bash
-# Copyright (C) 2014-2016 Ian Kelling
-# This program is under GPL v. 3 or later, see <http://www.gnu.org/licenses/>
+# I, Ian Kelling, follow the GNU license recommendations at
+# https://www.gnu.org/licenses/license-recommendations.en.html. They
+# recommend that small programs, < 300 lines, be licensed under the
+# Apache License 2.0. This file contains or is part of one or more small
+# programs. If a small program grows beyond 300 lines, I plan to switch
+# its license to GPL.
+
+# Copyright 2024 Ian Kelling
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
_lnf_existing_link() {
local target dest_file dest_dir
If the link already exists, make it's ownership be the same as if it was
newly created (only chown if we are root). Removes existing files using
-trash-put or rm -rf if it is not available, or if trash-put fails due to a
-limitation such as a cross-filesystem link. Create directory of link if
-needed. Slightly more restrictive arguments than ln.
+rm -rf. Create directory of link if needed. Slightly more restrictive
+arguments than ln.
In the 1st form, create a link to TARGET with the name LINK_NAME. In the 2nd
form, create a link to TARGET in the current directory. In the 3rd form, create
local -a to_remove to_link
- local x ret prefix dest_dir grp target
+ local ret prefix dest_dir grp target
local mkdir=false
if [[ $nodir ]]; then
if $do_exit; then return 0; fi
fi
if (( ${#to_remove[@]} >= 1 )); then
- if type -P trash-put >/dev/null; then
- if $verbose; then
- echo "lnf: trash-put -- ${to_remove[*]}"
- fi
- if ! $dry_run; then
- trash-put -- "${to_remove[@]}" || ret=$?
- fi
- # trash-put will fail to trash a link that goes across filesystems (72),
- # and for empty files (74)
- # so revert to rm -rf in that case
- if [[ $ret == 72 ]]; then
- echo "lnf: using rm -rf to overcome cross filesystem trash-put limitation"
- rm -rf -- "${to_remove[@]}" || return $?
- elif [[ $ret == 74 ]]; then
- echo "lnf: using rm -rf to overcome empty file & hardlink trash-put limitation"
- rm -rf -- "${to_remove[@]}"
- elif [[ $ret && $ret != 0 ]]; then
- return $x
- fi
- else
- if $verbose; then
- echo "lnf: rm -rf -- ${to_remove[*]}"
- fi
- if ! $dry_run; then
- rm -rf -- "${to_remove[@]}"
- fi
+ if $verbose; then
+ echo "lnf: rm -rf -- ${to_remove[*]}"
+ fi
+ if ! $dry_run; then
+ rm -rf -- "${to_remove[@]}"
fi
fi