Bash

在目前目錄shell腳本中複製具有不同名稱的文件

  • January 13, 2022

我的 bash 腳本

echo -n "Round Name:"
read round
mkdir $round

echo -n "File Names:"
read $1 $2 $3 $4 $5 $6
cp ~/Documents/Library/Template.py $1.py $2.py $3.py $4.py $5.py $6.py .

我對目錄進行了自動化,並希望對文件名進行相同的自動化。

接受未知輸入後,如何讓我的 shell 腳本執行此操作?

cp ~/Documents/Library/Template.py A.py B.py C.py D1.py D2.py $round/.

與其以互動方式讀取各種字元串,不如讓使用者在腳本的命令行上傳遞它們。

以下腳本將被稱為

./script -d dirname -t templatefile -- string1 string2 string3 string4

dirname…如果它不存在,它將創建,然後templatefile使用字元串給出的根名稱複製到該目錄。如果模板文件有一個文件名後綴,這將被添加到每個字元串的末尾以創建新的文件名(在從字元串中刪除後綴以不重複已經存在的後綴之後)。

您可以通過使用該選項繞過腳本中創建目錄的步驟-n,這使腳本假定 指定的目錄-d已經存在。

#!/bin/sh

# Unset strings set via options.
unset -v dirpath do_mkdir templatepath

# Do command line parsing for -d and -t options.
while getopts d:nt: opt; do
   case $opt in
       d)
           dirpath=$OPTARG
           ;;
       n)
           do_mkdir=false
           ;;
       t)
           templatepath=$OPTARG
           ;;
       *)
           echo 'Error in command line parsing' >&2
           exit 1
   esac
done

shift "$((OPTIND - 1))"

# Sanity checks.
: "${dirpath:?Missing directory path (-d)}"
: "${templatepath:?Missing template file path (-t)}"

if [ ! -f "$templatepath" ]; then
   printf 'Can not find template file "%s"\n' "$templatepath" >&2
   exit 1
fi

if "${do_mkdir-true}"; then
   # Create destination directory.
   mkdir -p -- "$dirpath" || exit
fi
if [ ! -d "$dirpath" ]; then
   printf 'Directory "%s" does not exist\n' "$dirpath" >&2
   exit 1
fi

# Check to see whether the template file has a filename suffix.
# If so, save the suffix in $suffix.
suffix=${templatepath##*.}
if [ "$suffix" = "$templatepath" ]; then
   # No filename suffix.
   suffix=''
else
   # Has filename suffix.
   suffix=.$suffix
fi

# Do copying.
for string do
   # Remove the suffix from the string,
   # if the string ends with the suffix.
   string=${string%$suffix}
   cp -- "$templatepath" "$dirpath/$string$suffix"
done

要在問題結束時重新創建範例,您可以像這樣使用此腳本:

./script -t ~/Documents/Library/Template.py -d "$round" -- A B C D1 D2

引用自:https://unix.stackexchange.com/questions/685125