tập tin mv với | xargs


18

Tôi chỉ đang cố gắng di chuyển một loạt các tệp (không phải liên kết tượng trưng) ra khỏi thư mục kích hoạt / etc / apache / site của tôi vào thư mục / etc / apache / site-Available với các mục sau:

/etc/apache2/sites-enabled$ find . -maxdepth 1 -type f | xargs mv {} ../sites-available/

nhưng tôi là một Ubuntu n00b và đang gặp lỗi này:

mv: target `./real-file' is not a directory

trong đó 'tệp thực' là tệp thử nghiệm tôi đã thiết lập trên môi trường dev của mình. Tôi đang cố gắng dọn dẹp mớ hỗn độn của người khác trên một máy chủ sản xuất ;-)

Câu trả lời:


27

Bạn có thể thử -exectùy chọn với findlệnh,

/etc/apache2/sites-enabled$ sudo find . -maxdepth 1 -type f -exec mv {} /etc/apache2/sites-available \;

Để di chuyển các tập tin thuộc sở hữu của root, bạn cần có sudoquyền.

Nếu bạn muốn sử dụng xargslệnh thì thêm -Itùy chọn cho nó.

find . -maxdepth 1 -type f | sudo xargs -I {} mv {} /etc/apache2/sites-available/

7

Tốt nhất bạn nên sử dụng -print0 với find, vì vậy tên tệp có dấu cách không làm hỏng mọi thứ.

Ví dụ, điều này sẽ làm việc:

find . -whatever-flags-go-here -print0 | xargs -r0 mv -t target-directory

0

bạn cũng có thể sử dụng một cách khác để thực hiện tương tự nhưng với hiệu suất bổ sung :

find . -maxdepth 1 -type f -exec mv {} /etc/apache2/sites-available \+

Lưu ý rằng nó kết thúc với \+nghĩa là cho lệnh find để có được đầu ra và mở rộng để {}thực hiện những gì bạn muốn, theo cách này bạn tránh được hai tùy chọn ( \;= cho mỗi mục VÀ chuyển vào một lệnh mới xargs)

Dưới đây là lời giải thích (bạn cũng có thể kiểm tra hướng dẫn man find)

Lệnh -exec {} + Biến thể của hành động -exec này chạy lệnh được chỉ định trên các tệp đã chọn, nhưng dòng lệnh được xây dựng bằng cách nối thêm mỗi tên tệp đã chọn ở cuối; tổng số lần gọi của lệnh sẽ ít hơn nhiều so với số lượng tệp được khớp. Dòng lệnh được xây dựng theo cách tương tự như xargs xây dựng các dòng lệnh của nó. Chỉ một trường hợp '{}' được cho phép trong lệnh. Lệnh được thực thi trong thư mục bắt đầu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.