Nautilus-скрипт для перемещения файла в каталог с тем же именем

Согласно Arch Wiki mailx разветвляется, а systemd убивает основной процесс при выходе из скрипта. Похоже, добавление -v к вызову mailx предотвращает его разветвление, но более правильный способ заставить его работать с systemd - добавить -Ssendwait к аргументам mailx.

1
27.05.2016, 01:49
2 ответа

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

Я вижу, что скрипты Nautilus могут быть написаны на любом языке. Вы можете сделать это с помощью наиболее распространенного языка сценариев / bin / sh .

#!/bin/sh
set -e
for file do
  case "$file" in
    */*) TMPDIR="${file%/*}"; file="${file##*/}";;
    *) TMPDIR=".";;
  esac
  temp="$(mktemp -d)"
  mv -- "$file" "$temp"
  mv -- "$temp" "$TMPDIR/$file"
done

Пояснения:

  • set -e прерывает сценарий при ошибке.
  • Цикл for перебирает аргументы сценария.
  • Блок case устанавливает TMPDIR в каталог, содержащий файл. Он работает независимо от того, содержит ли аргумент базовое имя или путь к файлу с частью каталога.
  • mktemp -d создает каталог со случайным именем в $ TMPDIR .
  • Сначала я перемещаю файл во временный каталог, затем переименовываю каталог.Таким образом, если операция прерывается посередине, файл по-прежнему имеет желаемое имя (тогда как в подходе с переименованием файла во временный существует момент времени, когда файл имеет неправильное имя).

Если вы хотите удалить расширение файла из каталога, измените последний вызов mv на

mv -- "$temp" "$TMPDIR/${file%.*}"

$ {file%. *} принимает значение file ] и удаляет суффикс, соответствующий . * . Если файл не имеет расширения, имя остается без изменений.

1
27.01.2020, 23:48

Как вы можете видеть объяснение в здесь,

Вы не можете иметь файл и папку с одинаковым именем, потому что каталоги - это просто специальный вид файлов

Что я предлагаю, так это переименовать > создать > переместить с проверкой команд && между ними

например

mv 123 123_tmp && mkdir 123 && mv 123_tmp 123/

Вы можете использовать абсолютные пути

0
27.01.2020, 23:48

Теги

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