Согласно Arch Wiki mailx разветвляется, а systemd убивает основной процесс при выходе из скрипта. Похоже, добавление -v к вызову mailx предотвращает его разветвление, но более правильный способ заставить его работать с systemd - добавить -Ssendwait к аргументам mailx.
У вас не может быть двух файлов с одинаковым именем одновременно, поэтому вам нужно сначала создать каталог под временным именем, затем переместите в него файл и переименуйте каталог. Или, в качестве альтернативы, переименуйте файл во временное имя, создайте каталог и, наконец, переместите файл.
Я вижу, что скрипты 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
] и удаляет суффикс, соответствующий . *
. Если файл не имеет расширения, имя остается без изменений.
Как вы можете видеть объяснение в здесь,
Вы не можете иметь файл и папку с одинаковым именем, потому что каталоги - это просто специальный вид файлов
Что я предлагаю, так это переименовать > создать > переместить с проверкой команд &&
между ними
например
mv 123 123_tmp && mkdir 123 && mv 123_tmp 123/
Вы можете использовать абсолютные пути