Nautilus-script는 파일을 동일한 이름의 디렉토리로 이동합니다.

Nautilus-script는 파일을 동일한 이름의 디렉토리로 이동합니다.

선택한 파일을 같은 이름의 새 폴더로 이동하는 노틸러스 스크립트를 어떻게 만들 수 있습니까?

내 시작점: /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/

절대 경로를 사용할 수 있습니다

관련 정보