Tarefa em lote para criar um arquivo de texto para arquivos de filme

0

Eu gostaria de preservar o nome do filme antes de renomeá-lo. Isso pode ser feito para todos os arquivos em uma pasta, em uns?

Assim, a partir do nome do filme atual "A Clockwork Orange_ (1971) Stanley Kubrick (DivX) .avi", o script nomeará um arquivo de texto para "A Laranja Mecânica (1971) Stanley Kubrick (DivX)" e colocará o nome completo; "A Laranja Mecânica (1971) Stanley Kubrick (DivX) .avi", no novo arquivo ...

Por favor explique passo a passo.

    
por Terje Folkvord 15.05.2017 / 22:05

1 resposta

0

O Steeldriver me bateu e mais elegantemente. Eu não vou estar em sua aula por uma década, pelo menos. Mas como eu já escrevi e testei isso, vou postar, FWIW. O código a seguir deve ser colocado em um script. Em seguida, você executa o script em um terminal com o único argumento sendo o diretório que contém os arquivos com os quais deseja lidar. Se você quisesse executá-lo a partir de um navegador de arquivos GUI, seria necessário invocá-lo com algo como xterm -e /path/to/this_script.sh $f , f , sendo qualquer variável que o navegador de arquivos transmita no diretório / path / to /.

Então abra um arquivo de texto simples com um editor, algo como geany, leafpad ou (shudder) gedit.

Copie o código abaixo, começando com "#! / bin / bash duas linhas abaixo disso.

##### NÃO copie esta linha, comece com a próxima linha começando com "#!"

#!/bin/bash

# repeats until you enter a valid directory
# you might add a test to make sure you have adequate permissions.
DIr="$1"
while [ ! -d "$DIr" ] || [ $DIr = / ]; do
      read -p "$DIr is not a valid argument. Enter a 
      directory other than '/' with files you want to process:" DIr
done

# canonicalizes directory name
DIr="$(readlink -f "$DIr")"

for FILE in $DIr/*; do
    BASENAMe="$(basename "$FILE")"
    BASE_NAME_minus_ext="$(echo -n "$BASENAMe" | rev | cut -d'.' -f2- | rev)"

    # If you want 'em all in a single list, instead use:
    # echo "$BASENAMe" >> "$DIr/List_of_names_minus_extensions"
    echo "$BASENAMe" > "$DIr"/"$BASE_NAME_minus_ext"

done

##### NÃO copie esta linha. Copie e inclua "concluído" logo acima. Não mais.

Salve o arquivo com um nome conveniente, como "list.sh", sem as aspas. Mova-o para um dos diretórios em seu caminho. Você pode exibir o caminho com o comando:

echo $PATH

Isso retornará uma string que é um conjunto de diretórios separados por dois-pontos (o caractere ":"). Todos os nomes de diretórios individuais começam com "/". Eles não incluem o ":". Qualquer um desses diretórios serve. Se estiver no seu caminho, suponho que o mais convencional seria:

/ usr / local / bin

mas isso realmente não importa, desde que seja um deles. Se você fez isso com um navegador de arquivos gráficos (como Nautilus, Thunar ou Pcmamfm), clique com o botão direito do mouse no script (ou seja, o arquivo que acabou de criar e movido) e clique em "propriedades" e em "permissões" se essa for uma guia separada . Defina como executável por você. Todos os tipos de maneiras de fazer isso. O mais conveniente é definir como pertencente ao seu nome de usuário e ao grupo do mesmo nome e verificar executável, legível e gravável pelo proprietário e pelo grupo, mas nenhum deles por outro.

Se você estiver fazendo isso a partir da linha de comando:

chmod -v ug+r+w+x /usr/local/bin/list.sh 

usando qualquer um dos diretórios no caminho em que você colocou o arquivo e o nome do arquivo que você forneceu.

Ou, se isso falhar, faça estes dois, um de cada vez, na ordem:

sudo chown your_user_name:your_user_name /usr/local/bin/list.sh
sudo chmod -v ug+r+w+x /usr/local/bin/list.sh 

Agora você deve ter um script executável que pode ser invocado digitando seu nome em um terminal e pressionando enter, seja simples assim:

list.sh

ou com o nome do diretório em que você deseja que ele aja assim:

list.sh /path/to/directory_that_has_your_movies

Se você não incluir o diretório / path / to / cheio_you_want_acted_upon, ele fará uma estimativa razoável de onde encontrá-lo. Pode supor errado. Se você quiser salvar pressionamentos de tecla você pode dar o script um nome mais curto como "lis" ou se você quiser tornar mais fácil lembrar o que ele faz, você pode dar um nome mais longo como "list_files_within_without_extensions.sh. O" .sh "finalizar é uma convenção comum para nomes de scripts apenas para você saber o que é o arquivo observando seu nome. Você pode nomear qualquer coisa, até mesmo" George Humperdink, III "se quiser, mas espaços e vírgulas tendem a causar problemas .

Mais alguns pensamentos: À luz da sua resposta ao sudodus, devo advertir, NÃO use o sudo para executar seu comando ou meu script. Não consigo pensar em nenhuma boa razão para os filmes pertencerem ao root ou em um diretório de propriedade do root. Eles absolutamente NÃO devem ser executados em um visualizador pelo root. Não temos muito problema de malware no ecossistema nix, mas invocar players de mídia, até mesmo espectadores de fotos, como root, está pedindo problemas e, se pessoas suficientes pedirem problemas, alguém os fornecerá. Portanto, os arquivos DEVEM ser legíveis por um usuário simples, e seria difícil mantê-los em um diretório que não fosse legível, gravável e "executável" por um usuário simples. Se o seu comando ou o meu script falhar de uma maneira que o sudo teria evitado, então você precisa alterar o perms dos arquivos ou do diretório em que eles estão. Usar o sudo seria como atear fogo na mobília porque o AC fez o quarto muito frio. Ele só vai lhe dar mais problemas de permissão, criando arquivos de lista de propriedade da raiz. Nunca use sudo a menos que você tenha, e somente se isso fizer sentido. Se não faz sentido ter que usar o sudo, então corrija o problema, não trabalhe com isso.

Além disso, seu comando funcionará para outras extensões, se você fizer as alterações lógicas nele. O script funciona para qualquer extensão como é.

Você notará perto do meio uma linha comentada sobre se você deseja que isso faça uma lista no diretório em que ela atua ou faça um arquivo de texto separado para cada filme. Colocar uma marca "#" no início de uma linha é referido como "comentar" a linha. Significa que é um comentário para os humanos lerem e o bash irá ignorá-lo. Você pode fazer o script funcionar de qualquer maneira, alterando qual das duas linhas é comentada. Um deve ser comentado e o outro não comentado.

    
por Lew Rockwell Fan 15.05.2017 / 23:07