Как к mv и принимают целевые полномочия каталога

for path in "some" "paths"
do
    [ -e "$path" ] || exit 1
done

является более портативным, но означает копировать список путей в цикле и rm команда. И хранение всех путей в той же строковой переменной означает, что сценарий больше не поддерживает ни одного из IFS символы в именах файлов.

2
22.12.2013, 01:59
1 ответ

Своего рода обертка обработала бы этот необычный сценарий. Пример был протестирован как работа, но выбирает минимальные варианты (никакие традиционные/bin/mv опции не могут быть переданы командной строке). Сохраните ниже к сценарию и выполните его (любой с bash script или chmod +x script затем выполните его ./script):

#!/bin/bash

helpusage() {
    echo "Usage: $0 targetdir files"
    exit
}

getperms() {
    /usr/bin/stat --printf="%a" "$1"
}
getowner() {
    /usr/bin/stat --printf="%U" "$1"
}
getgroup() {
    /usr/bin/stat --printf="%G" "$1"
}
if [[ $# -ge 2 ]]
then
    if [[ -d "$1" ]]
    then
        targetdir=$1
        shift
    else
        helpusage
    fi
else
    helpusage
fi

td_perms=$(getperms "$targetdir")
td_owner=$(getowner "$targetdir")
td_group=$(getgroup "$targetdir")

/bin/mv --target-directory="$targetdir" "$@" && \
for file in "$@"
do
    file="$targetdir/$file"
    /bin/chmod "$td_perms" "$file"
    /bin/chown "$td_owner":"$td_group" "$file"
done
0
27.01.2020, 23:02

Теги

Похожие вопросы