我想制作一个 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
ing 不包括文件名的目录的问题(抱歉,我不是以英语为母语的人),所以我只是即兴创作了这部分,但如果你给我更多关于你到底想要什么的例子,也许我可以帮你。