Удалите предпоследнее расширение в имени файла

Это - проблема с кислородной-gtk темой. Измените его на кислородную молекулу.

5
23.12.2014, 02:54
4 ответа

Внутри задних кнопок косая черта цитирует следующий символ. Таким образом, вы получаете выходные данные из команды

ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo $HOST_IS_ERPDB"

Вам нужно \\ вместо этого:

ERPTest=`ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo \\$HOST_IS_ERPDB"`

, чтобы ERPTest был набор к выходным данным команды

ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo \$HOST_IS_ERPDB"

Или используйте $ (...) вместо устаревшего '...' . Обратите внимание, что в некоторых версиях AIX может потребоваться использовать /bin/sh или ksh93 вместо античного /bin/ksh .

ERPTest=$(ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo \$HOST_IS_ERPDB")
-121--186586-

Ответ заключается в том, что невозможно (если не скомпилировать собственный двоичный файл rsync ).

rsync всегда добавляется в файл журнала. Поэтому, как предлагается в комментариях, перед запуском rsync следует удалить журнал. Простой пример удаления журнала и последующего запуска rsync :

rm rsync.log; rsync [OPTION...] SRC... [DEST]

Это также может быть полезно:

  1. https://serverfault.com/questions/219440/rsync-via-cron-how-do-i-enable-logging
  2. https://superuser.com/questions/545642/is-it-possible-to-make-rsync-make-a-log-file-on-a-remote-system
-121--108454-

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

mv -v -- "$i" "${i%.*.*}.${i##*.}"

(Очевидно, этот фрагмент предполагает, что имя файла содержит два расширения. Если нет, $ {i%. *. *} будет целым именем файла.)

11
27.01.2020, 20:31

Легкое переименование с MMV MMV Команда:

$ mmv -n '*.*.*' '#1.#3'

или с Rename Команда :

$ rename -n 's:(.*)\..*(\..*):$1$2:' *
4
27.01.2020, 20:31

Использование bash regex:

f=foo.bar.baz.qux
if [[ $f =~ (.+)\.[^.]+\.([^.]+)$ ]];then
    new="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}"
    if [[ -f "$new" ]]; then
        echo "moving $f would overwrite $new"
    else
        echo mv "$f" "$new"
    fi
fi
mv foo.bar.baz.qux foo.bar.qux

Это имеет то преимущество, что ничего не делает, если в названии меньше 2 точек.

-121--66015-

Если необходимо проверить соответствие имени файла - и, таким образом, переименовать только те файлы, которые фактически имеют два расширения, которые вы пытаетесь изменить - вы можете просто сделать:

case ${i##*/} in (*.*.*)
mv -- "$i" "${i%.*.*}.${i##*.}"
;;esac

Поймите, что, если вы не подтверждаете соответствие и вы настройками «$ i» с глобус как:

for i in *
mv "$i" ...

... тогда использование той же команды mv , что и выше (и в других ответах) может привести к перемещению файла в «$ i. $ i» по мере расширения var в себя, если образец не совпадает.

5
27.01.2020, 20:31

Использование Bash Regex:

f=foo.bar.baz.qux
if [[ $f =~ (.+)\.[^.]+\.([^.]+)$ ]];then
    new="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}"
    if [[ -f "$new" ]]; then
        echo "moving $f would overwrite $new"
    else
        echo mv "$f" "$new"
    fi
fi
mv foo.bar.baz.qux foo.bar.qux

Это имеет преимущество в том, что в названии есть менее 2 точек.

5
27.01.2020, 20:31

Теги

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