Di chuyển tệp và thư mục đệ quy trên Linux


75

Xem xét:

ls -al ../public-back
drwxrwxr-x  4 apache   apache     4096 Apr 19 03:32 templates

ls -al ../public-back/templates

drwxrwxr-x  2 apache   apache    4096 Apr 19 03:33 content
drwxrwxr-x  2 apache   apache   20480 Apr 20 06:14 images
drwxrwxr-x  2 apache   apache    4096 Apr 19 03:35 video

ls -al /public

drwxrwxr-x  4 apache   apache     4096 Apr 20 09:49 templates

ls -al /public/templates

drwxrwxr-x  2 apache   apache    4096 Apr 20 09:50 content
drwxrwxr-x  2 apache   apache    4096 Apr 20 09:50 images
drwxrwxr-x  2 apache   apache    4096 Apr 20 09:50 video

Làm cách nào để di chuyển nội dung /public-back/templatesđệ quy với quyền vào /public/templates?


mv ../public-back/tem mẫu /

mv -R ../public-back/templates/* public/templates/Tôi vẫn sẽ bỏ phiếu để di chuyển câu hỏi.

2
mv: tùy chọn không hợp lệ - R @Vladislav Zorov

3
tôi đã làm cp -a ../public-back/tem mẫu / công khai /

Câu trả lời:


92

Trừ khi tôi hiểu nhầm câu hỏi, điều này sẽ hoạt động:

mv /public-back/templates/* /public/templates

Ngoài ra, trừ khi bạn có một danh sách lớn các tệp, việc thêm -isẽ hỏi trước khi ghi đè lên bất cứ điều gì, điều này sẽ thêm phần an toàn khi sử dụng ký tự đại diện như thế nào *.


14
Điều này không di chuyển các tập tin ẩn.
Arda

2
Xem Askubfox.com/a/259386/358964 để đặt dotglob để các tệp ẩn cũng sẽ được di chuyển.
mkobit

3
Lưu ý: Điều này sẽ không ghi đè lên các tệp trong thư mục con. Bạn sẽ nhận được một Directory not emptytin nhắn.
Armstrongest

Có vẻ như nó làm phẳng hệ thống phân cấp thư mục. Không bảo quản các thư mục trong thư mục gốc cho tôi. Tất cả các tệp kết thúc trong cùng một thư mục, thay vì theo nghĩa đen là di chuyển thư mục gốc có cùng cấu trúc.
Robert Noack

Giải pháp này hoạt động, nhưng nếu bạn thấy lỗi này: mv: target '/public/templates' is not a directorychỉ cần tạo thư mục đích theo cách thủ công : mkdir /public/templates.
Ali Shabdar

8

Trang người đàn ông cho cp nói:

-p same as --preserve=mode,ownership,timestamps
-r same as --recursive=copy directories recursively

Thử;

cp -rp /public-back/templates/* /public/templates/

13
mvlà để di chuyển , trong khi cplà để sao chép - một sự phân biệt ngữ nghĩa / từ nguyên.
Marius Butuc

cplà cách chậm hơn mv. cpbuộc máy tính sao chép mọi thứ từ đĩa vào RAM, sau đó ghi lại vào đĩa, việc này có thể mất nhiều thời gian tùy thuộc vào kích thước của tệp. Tuy nhiên, mvluôn luôn xảy ra ngay lập tức vì chỉ có các liên kết phải được viết lại.
tjespe

4

Khi di chuyển các mục từ ổ ngón tay cái sang hệ thống OSMC của tôi, tôi đã thấy những điều sau đây rất hữu ích:

find /media/Pi\ Hard\ 16GB/ -name '*' -exec mv -v {} /media/External\ HDD/Videos/ \;

Giải thích về cách thức hoạt động dưới đây.

BTW, Đừng quên thêm dấu gạch chéo ngược trước bất kỳ khoảng trắng nào trong tên thư mục nguồn hoặc đích (xem bên trên).

find  finds all files and folders in the destination path.

/media/Pi Hard 16GB/ is the path searched. Escape special char such as spaces.

-name '*' filters on names. If you do not escape or quote this then 
          the shell will expand it before find sees it.

-exec     Executes a command, in our case mv

-v        Verbose, so you can see what's happening (optional)

{}        is replaced by the name of the found object.

Thực tế, bạn đang tìm tất cả các tệp và tất cả các thư mục và di chuyển từng cái một (hoặc nếu một thư mục được tìm thấy trước, bạn đang di chuyển thư mục đó và nội dung trong đó). Điều này bắt đầu một quy trình mới cho mỗi lần di chuyển và rất không hiệu quả. Chỉ sử dụng điều này khi các lệnh thông thường thất bại.


2

mv dường như không làm điều này. Nhưng bạn có thể sử dụng mẹo nhỏ này, hoạt động như một lá bùa:

tar cf - . |(cd /targetdir; tar xvf -)

và bảo tồn quyền và tất cả.

Lưu ý: không có cách nào ở trên làm việc cho tôi, đó là lý do tại sao cách giải quyết này.


1
cp -a --link ../public-back/* /public/.  &&  rm -rf ../public-back

Vì vậy, tạo các liên kết cứng trong thư mục đích và loại bỏ các nguồn dir. 'mv' đơn giản là sẽ không hoạt động trong trường hợp của bạn và nói chung chỉ hoạt động khi thư mục nguồn và mệnh không có cây con chung.

Lưu ý rằng tôi giả sử rằng từ 'di chuyển' trong câu hỏi có nghĩa là thư mục nguồn sẽ bị mất sau khi hoạt động.

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.