수동으로 수행하는 대신 파일을 심볼릭 링크하는 bash 스크립트를 만들고 싶습니다. 작업 흐름은 다음과 같을 것 같습니다.
질문 1: 소스인 파일/폴더의 경로는 무엇입니까? (사용자 입력 소스)
질문 2: 목적지까지 가는 길은 무엇입니까? (사용자가 목적지를 입력합니다)
$SOURCE
그런 다음 이 입력을 받아 변경 가능 하게 만듭니다.$DESTINATION
그런 다음 다음과 같이 실행합니다.
mkdir -p $DESTINATION
ln -s "$SOURCE" "$DESTINATION"
스크립트는 사용자가 종료하기로 결정할 때까지 각 실행 및 반복 후에 변수를 잊어야 합니다.
또한 사용자가 입력한 대상이 일반적으로 다른 파일 이름으로 끝나는 경우 어떻게 디렉터리를 mkdir하고 파일 이름을 제외할 수 있습니까?
/root/files/1
내가 심볼릭 링크를 하고 싶은 것처럼 /var/files/2
"2"는 파일 "1"의 다른 이름일 뿐입니다. 어떻게 하면 스크립트를 그렇게 스마트하게 만들 수 있나요?
어리석은 질문이라면 죄송합니다. 저는 이 세상에 처음 왔을 뿐이고 이 스크립트는 제가 작성한 스크립트 중 가장 복잡한 스크립트 중 하나가 될 것입니다.
답변1
다음과 같은 것을 원하는 것 같습니다.
#!/usr/bin/env bash
while :; do
read -r -p 'Source: ' source
read -r -p 'Destination: ' destination
[[ $destination != */* ]] || mkdir -p -- "${destination%/*}" &&
ln -s -- "${source}" "${destination}"
read -r -p 'Exit? (type "e" to exit): '
[[ "${REPLY}" == 'e' ]] && break
done
예:
$ cd ~/Desktop
$ ls -l
total 0
$ touch file
$ ls -l
total 0
-rw-rw-r-- 1 a a 0 sep 11 03:13 file
$ my_script.sh
Source: ./file
Destination: ./dir/file_copy_1
Exit? (type "e" to exit):
Source: ./file
Destination: ./dir/file_copy_2
Exit? (type "e" to exit): e
$ ls -l ./dir
total 2
lrwxrwxrwx 1 a a 6 sep 11 03:15 file_copy_1 -> ./file
lrwxrwxrwx 1 a a 6 sep 11 03:15 file_copy_2 -> ./file
파일 이름 없이 디렉토리를 지정하는 것에 대한 귀하의 질문을 잘 이해할 수 없어서 mkdir
(죄송합니다. 저는 영어를 모국어로 사용하지 않습니다.) 그래서 이 부분을 즉석에서 만들었습니다. 하지만 정확히 원하는 것이 무엇인지에 대한 추가 정보를 제공해 주시면 아마도 제가 할 수 있을 것입니다. 도와주세요.