nemo 파일 관리자에 사용자 정의 작업을 추가하려고 합니다. 이 작업의 목적은 단순히 파일 이름의 모든 공백을 "_"로 바꾸는 것입니다. 내 작업 파일은 다음과 같습니다.
[Nemo Action]
Name=Normalize
Comment=replace all occurences of " " by "_"
Exec=<normalize.sh %F>
Selection=Any
Extensions=Any
Bash 스크립트 Normalize.sh는 다음과 같이 actions 디렉터리에 있습니다.
#!/usr/bin/bash
if [[ "$#" != 1 ]]
then exit 1
fi
name=`echo "$1" | sed "s/\ /\_/g"`
mv "$1" "$name"
exit 0
왜 이것이 작동하지 않는지 아는 사람이 있습니까?
답변1
질문:
문제는 매우 사소합니다. 즉 %F
, 파일 이름이고 파일 이름에 공백이 포함되어 있으므로 다음과 같이 스크립트를 호출합니다.
normalize.sh my fancy file
그래서 그것은 $1
되었다 my
, $2
되었다 fancy
, $3
되었다 file
. 이제 $#
3이 되었습니다.
수정 1(권장):
이 문제를 해결하려면. 매개변수 개수를 확인할 필요는 없습니다. 그러면 $@
대신 사용할 수 있습니다 $1
. 스크립트는 다음과 같습니다.
#!/usr/bin/bash
name=`echo "$@" | sed "s/\ /\_/g"`
mv "$@" "$name"
exit 0
수정 2:
또 다른 해결책은 주위에 따옴표를 붙이는 것입니다 %F
. 올바른 코드는 다음과 같습니다.
[Nemo Action]
Name=Normalize
Comment=replace all occurences of " " by "_"
Exec=<normalize.sh "%F">
Selection=Any
Extensions=Any
향상된 스크립트:
#!/usr/bin/env bash
mv "$@" "$(tr ' ' '_' <<< "$@")"
exit 0
- 일반적으로
bash
켜져 있습니다/bin/bash
. 귀하의 것이 열려 있는 것 같기 때문에/usr/bin/bash
(처음으로 본 것입니다) bash가 어디에 있든 실행할 수 있는일반적인which bash
해결 방법을 설정했습니다. 하지만 터미널에서 bash에 입력된 경로를 볼 수 있습니다 . - 매개변수 계산 조건을 제거했습니다.
sed
기존 것을 사용하는 이유는 무엇입니까tr
?echo
파일sed
이나 를tr
사용 하는 대신<<<
.- 모든 것을 한 줄에 넣으면 어떨까요?