선택한 파일을 같은 이름의 새 폴더로 이동하는 노틸러스 스크립트를 어떻게 만들 수 있습니까?
내 시작점: /home/user/123 여기 123은 확장자가 없는 파일입니다.
내 목표는 다음 결과를 얻는 것입니다. /home/user/123/123 여기에는 123이라는 이름의 새 폴더에 동일한 파일 123이 있습니다.
시도할 때마다 mkdir: '123' 디렉토리를 생성할 수 없습니다: 파일이 존재한다는 결과가 나오기 때문에 이것을 알아낼 수 없습니다.
답변1
동일한 이름을 가진 두 개의 파일을 동시에 가질 수 없으므로 먼저 임시 이름으로 디렉터리를 만들고 파일을 그 디렉터리로 옮긴 다음 디렉터리 이름을 바꿔야 합니다. 또는 파일 이름을 임시 이름으로 바꾸고 디렉터리를 만든 다음 마지막으로 파일을 이동합니다.
나는 보았다노틸러스 스크립트어떤 언어로든 쓸 수 있습니다. 가장 일반적인 스크립팅 언어를 사용할 수 있습니다 /bin/sh
.
#!/bin/sh
set -e
for file do
case "$file" in
*/*) TMPDIR="${file%/*}"; file="${file##*/}";;
*) TMPDIR=".";;
esac
temp="$(mktemp -d)"
mv -- "$file" "$temp"
mv -- "$temp" "$TMPDIR/$file"
done
설명하다:
set -e
오류 발생 시 스크립트를 중단합니다.- 이
for
루프는 스크립트의 매개변수를 반복합니다. - 블록 은 파일이 포함된 디렉터리로
case
설정됩니다 .TMPDIR
인수에 기본 이름이 포함되어 있는지 또는 디렉터리 부분이 포함된 파일 경로가 포함되어 있는지는 유효합니다. mktemp -d
에 임의의 이름을 가진 디렉터리를 만듭니다$TMPDIR
.- 먼저 파일을 임시 디렉터리로 옮긴 다음 디렉터리 이름을 바꿨습니다. 이렇게 하면 작업이 중간에 중단되더라도 파일은 여전히 필요한 이름을 유지합니다(반면 임시 파일로 이름을 바꾸는 방법에서는 파일 이름이 잘못된 시점이 있습니다).
디렉토리에서 파일 확장자를 제거하려면 mv
마지막 호출을 다음으로 변경하십시오.
mv -- "$temp" "$TMPDIR/${file%.*}"
${file%.*}
값을 가져오고 file
일치하는 접미사를 제거합니다 .*
. 파일에 확장명이 없으면 이름은 변경되지 않습니다.
답변2
설명을 보시면 아시겠지만여기,
디렉터리는 특수한 유형의 파일이므로 동일한 이름의 파일과 폴더를 가질 수 없습니다.
내 제안은 이름 바꾸기> 만들기> 이동 및 &&
명령 확인을 수행하는 것 입니다.
예를 들어
mv 123 123_tmp && mkdir 123 && mv 123_tmp 123/
절대 경로를 사용할 수 있습니다