O problema:
Seu problema é tão trivial, que %F
é o nome do arquivo, e o nome do arquivo contém espaços, então você está chamando o script desta forma:
normalize.sh my fancy file
Portanto, $1
se torna my
, $2
se torna fancy
e $3
se torna file
. Agora $#
se torna 3.
Correção 1 (recomendado):
Para consertar isso. você não precisa verificar o número de argumentos. Então você pode usar $@
em vez de $1
. O script ficará assim:
#!/usr/bin/bash
name='echo "$@" | sed "s/\ /\_/g"'
mv "$@" "$name"
exit 0
Correção 2:
Outra solução é colocar aspas em torno de %F
. O código correto seria este:
[Nemo Action]
Name=Normalize
Comment=replace all occurences of " " by "_"
Exec=<normalize.sh "%F">
Selection=Any
Extensions=Any
Script melhorado:
#!/usr/bin/env bash
mv "$@" "$(tr ' ' '_' <<< '$@')"
exit 0
- Normalmente,
bash
está em/bin/bash
. Como o seu parece estar em/usr/bin/bash
(a primeira vez que vejo isso) eu coloquei uma soluçãouniversalpara executar o bash onde quer que esteja. No entanto, você pode ver o caminho para basear a digitação dewhich bash
em um terminal. - Removido condicional para contar argumentos.
- Por que usar
sed
para essetr
? - Em vez de
echo
do arquivo parased
outr
, use melhor<<<
. - Por que não colocar tudo em uma linha?