Automator에서 파일 이름의 앞 / 뒤 공백을 어떻게 제거 할 수 있습니까?


4

내 아내는 백업 외장 스토리지에 파일을 저장할 때 파일의 이름을 지루하게 바꾸 었으므로 필자는이를 위해 자동화 프로그램을 사용하여 조사했습니다. 이제는 자동화 폴더를 사용하여 파일을 삭제하고 파일의 이름을 적절하게 바꿉니다.

이제 파일에 공백 및 / 또는 후행 공백이 포함될 수있는 상황에 직면 해 있습니다. 공백을 어떻게 간단하게 줄일 수 있습니까?

필자는 AppleScript를 사용한 적이 없지만 쉘 스크립팅에 능숙합니다.이 작업을 수행 할 쉘 스크립트를 작성할 수 있습니까? 누군가가 올바른 방향으로 나를 가리킬 수 있다면 AppleScript를 제공 할 것입니다.


이 작업을 수행 할 쉘 스크립트를 작성하고 Automator에서 쉘 스크립트를 실행할 수 있습니다. Automator에서 Run Shell Script를 찾으십시오.
Kassym Dorsel

나는 또한 파일에서 후행 공백을 제거하려고했다. 수퍼 유저 /questions/405127/...
Joe J

답변:


1

for f in "$@"; do new="$(echo -n "$f" | sed -E 's|/$||;s| +$||;s|^ +||;s|/ +([^/]+$)|/\1|;s| +(\.[^.][a-zA-Z0-9.]*)$|\1|g')"; mv "$f" "$new"; echo "$new"; done

(으로 붙여 넣기 셸 스크립트 실행 행동과 선택 패스 입력 : 인수로 .)


흥미롭게도, 나는 변수 이름을 어떻게 바꿔서 읽는 것이 더 쉬워 졌는지 당신이 모든 것을 하나의 정규식에 넣는 것을 좋아한다. 실제로 고려해야 할 사항 중 하나는 기존 경로에서 공백을 제거하지 않고 Automator 스크립트가 실제로 실패하게 만들지 않아야한다는 것입니다.
Brett Ryan

아, 잠깐, 내 나쁜, 당신은 단지 마지막 / 그룹에서 캡처. 좋아, 당신이 이겼어 :)
Brett Ryan

정규식을이 코드로 변경하십시오. s|/$||;s| +$||;s|^ +||;s|/ +([^/]+$)|/\1|;s| *\. *([^\.]+)$|\.\1|; 확장 기능에서 다른 문자를 허용 할 수 있으며 공백으로 시작하는 확장 기능을 원하지 않습니다.
Brett Ryan

s| *\. *([^.]+)$|\.\1| 대체 할거야. EOL + . + LF.plistEOL +.+ LF.plist. 그것은 영향을 미치지 않을 것이다. some .tar.gz.
Lri

포인트 지적하지만, 당신의 정규식도 않습니다. 실제로, 여분의 마침표 문자는 마침표가있는 공백을 대체하기 때문에 그룹 포함 전에 오류가있는 것처럼 보입니다 ( some .tar.gz 된다 some..tar.gz ). 마침표를 제거하면 작동하지만 시작 부분에 확장 프로그램의 공간이 나타나지 않습니다. 너무 중요하지 않다고 말하기에 충분합니다. 이러한 것들은 더 사소한 것이며 영원히 의문을 가질 수 있습니다.
Brett Ryan

1

그 한 줄 스크립트, 그 폴더에 CD가 있고 ...

for f in *; do mv "$f" "$(echo $f)"; done

쉘 스크립트에 넣고 Applescript에서 호출 :

tell application "Terminal"
    do script "whatever"
end tell

이것은 공백이 4 개있는 파일 이름에 대해서만 작동합니다 :-(
nohillside

f에 대한 *; mv "$ f"할 일 echo $f | cut -b 1- "완료 됨 남자 컷
Tuan Anh Tran

for f in *; do mv "$f" "$(echo $f)"; done 그럼, 아무 상관 없어요. cut 조금도.
nohillside

고마워요,하지만 어떻게 작동합니까? 자동화가 파일의 인수로 스크립트를 호출하지 않습니까? 하지 않을 것이다. for f in "$@"; do echo mv "$f" "$(echo $f)" ; done 더 적절한가?
Brett Ryan

1
@frozenwithjoy : $ f에 공백이 포함되어 있으면 실패합니다. "foo bar".
nohillside

1

Tuan의 대답에 기초하여 정답을 얻으려면 파일의 이름을 바꿀뿐만 아니라 다음 작업에 대한 작업 체인을 보존 할 필요가있는 다음이 필요합니다.

또한 파일 만 상위 폴더의 이름을 바꿀 필요가 없다는 점에 유의하십시오.

for f in "$@" ; do
    dirname=$(dirname "$f")
    basename=$(basename "$f")
    name=${basename%.*}
    ext=${basename##*.}
    name="$(echo "$name" | sed -Ee 's/^ +//;s/ +$//')"
    new="$dirname/$name.$ext"
    mv "$f" "$new"
    echo "$new"
done

또한 이것을 쉘 스크립트 자체에 넣을 필요가 없으며, automator는이를 "Run Shell Script"작업에 포함시킬 수 있습니다.



0

파일 이름을 다듬는 AppleScript (Automator와 매우 유사)가 있습니다. 조금 길기 때문에 여기에 게시 할 수는 없지만 이리 코드에 대한 링크입니다. 스크립트의 기능과 작동 방식을 설명하는대로 코드의 시작 부분을 읽어야합니다.


1
대본을 보았을 때, 나는 웃어야할지 울지 말아야할지 모르겠다.
nohillside
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.