Bash
在目前目錄shell腳本中複製具有不同名稱的文件
我的 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