Câu hỏi của bạn không rõ ràng. Điều hợp lý nhất để làm là không chạy hoàn cp
toàn khi ký tự đại diện không khớp với bất kỳ tệp nào, thay vì chạy cp
và ẩn thông báo lỗi.
Để làm điều đó, nếu shell bị bash, hãy đặt nullglob
tùy chọn sao cho mẫu ký tự đại diện mở rộng thành không có gì nếu nó không khớp với bất kỳ tệp nào. Sau đó kiểm tra xem mô hình có mở rộng thành bất cứ điều gì không và không gọi cp
trong trường hợp đó.
#!/bin/bash
shopt -s nullglob
files=(/srv/ftp/201*/wha*/*.jj)
if [[ ${#files[@]} -ne 0 ]]; then
cp "${files[@]}" ~
fi
Trong sh đơn giản, kiểm tra xem toàn cầu có được giữ nguyên không, chỉ vào một tệp không tồn tại.
set -- /srv/ftp/201*/wha*/*.jj
if ! [ -e "$1" ] && ! [ -L "$1" ]; then
cp "$@" ~
fi