「file.doc」ファイルをコピーして「file_copy.doc」にコピーするときは、名前を変更して同じディレクトリに入れることができますか?
これは、スクリプトを呼び出してパラメータにファイル名を追加しなければ達成できません。
bash launch_copyer file.doc
ベストアンサー1
ここではこれは必要ありませんbash
。標準sh
インタプリタの実装は次のことを行います。
#! /bin/sh -
ret=0
for file do
dir=$(dirname -- "$file")
case $dir in
(*[!/]*) dir=$dir/ # handle / and // specially
esac
base=$(basename -- "$file")
name=${base%.*}
name=${name:-$base} # don't consider .bashrc the extension in /foo/.bashrc
ext=${base#"$name"}
new_file=$dir${name}_copy$ext
cp -- "$file" "$new_file" || ret=$?
done
exit "$ret"
(ファイル名とディレクトリ名が改行文字で終わらないと仮定)。
(もちろんこれは一人称bash
視点以降も同様だ。bash
標準sh
通訳.)
特定のソリューションでは、bash
次のことを試すことができます。
#! /bin/bash -
ret=0
re='^((.*/)?[^/])(([^/]*)(\.))?([^/]*)/*$'
for file do
if [[ $file =~ $re ]]; then
if [[ ${BASH_REMATCH[5]} ]]; then
suffix=_copy.${BASH_REMATCH[6]}
else
suffix=${BASH_REMATCH[6]}_copy
fi
cp -- "$file" "${BASH_REMATCH[1]}${BASH_REMATCH[4]}$suffix" || ret=$?
else
printf >&2 '%s\n' "$0: Error: refusing to copy $file"
ret=1
fi
done
exit "$ret"