Matthew Flaschen là một tốt nhất, tuy nhiên nó có một vài sai sót.
- Không kiểm tra xem bản sao đã thành công trước khi tệp gốc bị cắt bớt hay chưa. Sẽ tốt hơn nếu làm cho mọi thứ phụ thuộc vào bản sao thành công hoặc kiểm tra sự tồn tại của tệp tạm thời hoặc để hoạt động trên bản sao. Nếu bạn là một loại người treo đai và treo, bạn sẽ thực hiện một kết hợp như tôi đã minh họa bên dưới
ls
là không cần thiết.
- Tôi muốn sử dụng tên biến tốt hơn "i" - có lẽ là "tệp".
Tất nhiên, bạn có thể rất hoang tưởng và kiểm tra sự tồn tại của tập tin tạm thời ngay từ đầu, do đó bạn không vô tình ghi đè lên nó và/hoặc sử dụng một UUID hoặc một tên tập tin được tạo ra. Một trong những mktemp, tempfile hoặc uuidgen sẽ làm điều này.
td=TMPDIR
export TMPDIR=
usertemp=~/temp # set this to use a temp directory on the same filesystem
# you could use ./temp to ensure that it's one the same one
# you can use mktemp -d to create the dir instead of mkdir
if [[ ! -d $usertemp ]] # if this user temp directory doesn't exist
then # then create it, unless you can't
mkdir $usertemp || export TMPDIR=$td # if you can't create it and TMPDIR is/was
fi # empty then mktemp automatically falls
# back to /tmp
for file in *.sql
do
# TMPDIR if set overrides the argument to -p
temp=$(mktemp -p $usertemp) || { echo "$0: Unable to create temp file."; exit 1; }
{ printf '\xFF\xFE' > "$temp" &&
cat "$file" >> "$temp"; } || { echo "$0: Write failed on $file"; exit 1; }
{ rm "$file" &&
mv "$temp" "$file"; } || { echo "$0: Replacement failed for $file; exit 1; }
done
export TMPDIR=$td
Bẫy có thể tốt hơn tất cả các trình xử lý lỗi riêng biệt mà tôi đã thêm. Không có nghi ngờ gì về sự thận trọng này là quá mức cần thiết cho một kịch bản một lần, nhưng những kỹ thuật này có thể giúp bạn tiết kiệm khi đẩy xô đẩy, đặc biệt là trong một thao tác đa tệp.
Nguồn
2009-06-25 19:37:05
printf! Cảm ơn bạn đời, tôi nghĩ rằng tôi đã googling cho đến khi kết thúc thời gian! –
Điểm mã BOM là U + FEFF nhưng biểu diễn bằng chữ của nó trong UTF-8 là 'EF BB BF' (ba byte). Điều này sẽ chỉ hoạt động nếu tập tin đã có trong UTF-16, thứ tự nhỏ. Xem http://en.wikipedia.org/wiki/Byte_order_mark#Representations_of_byte_order_marks_by_encoding – pimlottc