nemo 작업/bash 스크립트 사용자 정의

nemo 작업/bash 스크립트 사용자 정의

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사용 하는 대신 <<<.
  • 모든 것을 한 줄에 넣으면 어떨까요?

관련 정보