Điểm:0

Bash: chức năng/cách sử dụng tên cơ sở lệnh không đúng

lá cờ ca

Điều tôi muốn trong lệnh sau là tìm các tệp cụ thể và di chuyển chúng sang các thư mục khác trong khi nối thêm ".log" vào tên tệp đích.

find /src/dir/ -type f -mtime +3 -exec mv {} /dst/dir/`basename {}`.log \;

Nhưng nó thất bại vì tên cơ sở lệnh kèm theo trong backticks không hoạt động bình thường. $(tên cơ sở {}) cũng có kết quả tương tự.

mv: không thể di chuyển /src/dir/foo đến /dst/dir//src/dir/foo.log: Không có tệp hoặc thư mục như vậy

Bất kỳ ý tưởng sẽ được đánh giá cao.

Điểm:1
lá cờ in

Đó là bởi vì vỏ nhìn thấy `tên cơ sở {}` hoặc $(tên cơ sở {}) trước khi nó xử lý các đối số để tìm và xử lý chúng. Viết một tập lệnh thực hiện những gì bạn muốn và chạy nó với -exec thay thế.

tìm ... -exec myscript {} \;

ở đâu ký tự của tôi là một cái gì đó giống như

#! /bin/sh
mv "$1" /dst/dir/$(tên cơ sở "$1").log

Bạn có thể gọi trình bao cho mỗi tệp được tìm thấy, do đó, những điều sau đây cũng có thể thực hiện được:

tìm ... -exec bash -c 'mv "$1" "$(basename "$1").log"' -- {} \;

Nhưng hãy kiểm tra giải pháp như vậy đúng cách để đảm bảo trích dẫn và thoát hoạt động chính xác.

aschkant avatar
lá cờ ca
Cảm ơn @choroba đã chia sẻ. Vì dòng này là một phần của chính tập lệnh, tôi tự hỏi liệu tôi có thể chỉ cần thêm các đối số vào -exec hoặc hoàn toàn trong một dòng để hoàn thành công việc hay không.
lá cờ in
Bạn có thể thêm các đối số, nhưng bạn không thể sử dụng cú pháp shell trên chúng - trừ khi bạn cố gắng viết một cái gì đó như `-exec bash -c 'mv "$1" "$(basename "$1").log"' -- {} \;`

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.