Nautilus-script para mover o arquivo para o mesmo diretório de nomes

1

Como posso criar um script do Nautilus que mova o arquivo selecionado para uma nova pasta com o mesmo nome?

Meu ponto de partida: / home / user / 123 aqui 123 é um arquivo sem extensão

Meu objetivo aqui é alcançar esse resultado: / home / user / 123/123 aqui temos o mesmo arquivo 123 dentro da nova pasta também chamada de 123

Eu não consigo entender isso, porque cada tentativa que fiz me deu o resultado: mkdir: não é possível criar o diretório '123': o arquivo existe

    
por user68563 27.05.2016 / 00:49

2 respostas

1

Você não pode ter dois arquivos com o mesmo nome ao mesmo tempo, então você precisa primeiro criar o diretório com um nome temporário, depois mover o arquivo para ele e renomear o diretório. Ou, alternativamente, renomeie o arquivo para um nome temporário, crie o diretório e, finalmente, mova o arquivo.

Vejo que scripts do Nautilus podem ser escritos em qualquer idioma. Você pode fazer isso com a linguagem de script mais difundida, /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

Explicações:

  • set -e anula o script em erro.
  • O loop for itera sobre os argumentos do script.
  • O bloco case define TMPDIR como o diretório que contém o arquivo. Funciona se o argumento contiver um nome base ou um caminho de arquivo com uma parte do diretório.
  • mktemp -d cria um diretório com um nome aleatório em $TMPDIR .
  • Primeiro, movo o arquivo para o diretório temporário e renomeio o diretório. Dessa forma, se a operação for interrompida no meio, o arquivo ainda terá seu nome desejado (enquanto na abordagem renomear arquivo para temp, há um momento em que o arquivo tem o nome incorreto).

Se você quiser remover a extensão do arquivo do diretório, altere a última mv chamada para

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

${file%.*} recebe o valor de file e remove o sufixo que corresponde a .* . Se o arquivo não tiver extensão, o nome não será alterado.

    
por 27.05.2016 / 16:54
0

Como você pode ver explicado em aqui ,

You cannot have a file and folder with the same name because directories are just a special kind of file

O que eu sugiro é renomear > criar > mover com validação de comando && entre eles

por exemplo,

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

Você pode usar caminhos absolutos

    
por 27.05.2016 / 02:21