Existe uma versão melhorada de “pick” que funcionará com nomes de arquivos com espaços?

2

Existe uma versão do script de seleção que funcionará corretamente com espaços nos nomes de arquivos?

Essa é uma pergunta complicada - escolher é trivial aprimorar para trabalhar com espaços em nomes de arquivos, mas a saída é apenas os nomes de arquivos - sem indicação de onde um nome de preenchimento começa ou termina.

Meu objetivo é poder dizer algo como

for i in 'pick .??*' ; do ... ; done

Mas isso é, até onde posso dizer, sem esperança; mesmo usando a sintaxe $() em vez dos backticks, como você obtém os nomes de arquivos intactos da seleção para o processamento?

A única ferramenta em que consigo chegar é xargs -0 , o que me permite ter nomes arbitrários - mas não sei como fazer interface com isso, exceto em find -0 .

EDIT: Pick é um script que pega vários arquivos e pergunta quais você quer ou não.

Veja link para uma amostra. Não é complicado, mas se você não sabe como redirecionar dentro de um shell script, ou nunca viu esse constructo antes, será uma surpresa.

E sim, gera um nome de arquivo por linha.

    
por Keybounce 04.10.2014 / 19:29

2 respostas

1

Se pick de saída de nome de arquivo por linha, você pode definir IFS para conter apenas uma nova linha. Por exemplo (no bash):

saved_ifs=$IFS
IFS=$'\n'
for i in $(pick .??*) ; do ... ; done
IFS=$saved_ifs

Isso permitirá que seus nomes de arquivos contenham espaços e tabulações, é claro, se eles contiverem novas linhas, ainda haverá um problema. Você também pode considerar desativar a globbing se houver algum nome de arquivo com caracteres glob (por exemplo, * ou ? ). Use set -f para desativar e set +f para reativar.

    
por 04.10.2014 / 19:45
0
find -name "* *" -type f -exec rename 's/ /_/g' {} +

Substitua os espaços nos seus nomes de arquivos por "_".

Em seguida, use pick.

Racional: Os espaços nos nomes dos arquivos são geralmente considerados como uma convenção de nomenclatura de arquivos não padrão. Êxito bem sucedido é sobre fazer as coisas da mesma maneira todas as vezes, lembrando da arte da guerra de Sun Tzu: escolha suas batalhas com cuidado.

    
por 04.10.2014 / 19:41