在 bash 中使用通配符移动和备份多个目录
move and backup multiple directories with wildcards in bash
目标是将多个目录(包括其内容)移动到另一个目录,同时进行并行备份。
Input="/home/input/folder*/"
Output="/home/output/"
Backup="/home/backup/"
for folder in "$Input" ; do
cp -rp "$folder" "$Backup" || { echo 'error backup'; exit; }
cp -rp "$folder" "$Output" || { echo 'error move'; exit; }
rm -rf "$folder"
done
我收到以下错误消息:cp: cannot stat ‘/home/input/folder*/’: file or folder not found
两个问题:
- 为什么通配符不起作用?
- 有没有更优雅的方法来完成这个任务?
将您的所有评论汇总为答案:
Input="/home/input/"folder*/
Output="/home/output/"
Backup="/home/backup/"
shopt -s nullglob
for folder in $Input ; do
cp -rp "$folder" "$Backup" || { echo 'error backup'; exit; }
cp -rp "$folder" "$Output" || { echo 'error move'; exit; }
rm -rf "$folder" || { echo 'error remove'; exit; }
done
目标是将多个目录(包括其内容)移动到另一个目录,同时进行并行备份。
Input="/home/input/folder*/"
Output="/home/output/"
Backup="/home/backup/"
for folder in "$Input" ; do
cp -rp "$folder" "$Backup" || { echo 'error backup'; exit; }
cp -rp "$folder" "$Output" || { echo 'error move'; exit; }
rm -rf "$folder"
done
我收到以下错误消息:cp: cannot stat ‘/home/input/folder*/’: file or folder not found
两个问题:
- 为什么通配符不起作用?
- 有没有更优雅的方法来完成这个任务?
将您的所有评论汇总为答案:
Input="/home/input/"folder*/
Output="/home/output/"
Backup="/home/backup/"
shopt -s nullglob
for folder in $Input ; do
cp -rp "$folder" "$Backup" || { echo 'error backup'; exit; }
cp -rp "$folder" "$Output" || { echo 'error move'; exit; }
rm -rf "$folder" || { echo 'error remove'; exit; }
done