di chuyển tệp theo danh sách trong tệp (với khoảng trắng hàng đầu)


11

Tôi có một tập tin chứa tên tập tin. Ví dụ:

/tmp/list.txt (đó là với khoảng trắng ở đầu mỗi dòng):

  /tmp/file.log
  /app/nir/home.txt
  /etc/config.cust

Tôi muốn sử dụng một dòng, di chuyển tất cả các tập tin được liệt kê trong /tmp/list.txtđể/app/dest

Vì vậy, nó phải là một cái gì đó như thế này:

cat /tmp/list.txt | xargs mv /app/dest/

Câu trả lời:


21

Bạn chỉ thiếu -ttùy chọn cho mv(giả sử GNU mv):

cat /tmp/list.txt | xargs mv -t /app/dest/

hoặc ngắn hơn (lấy cảm hứng từ câu trả lời của X Tian):

xargs mv -t /app/dest/ < /tmp/list.txt

các không gian hàng đầu (và có thể kéo dài) được loại bỏ. Không gian trong tên tập tin sẽ dẫn đến các vấn đề.

Nếu bạn có khoảng trắng hoặc tab hoặc dấu ngoặc kép hoặc dấu gạch chéo ngược trong tên tệp, giả sử GNU xargsbạn có thể sử dụng:

sed 's/^ *//' < /tmp/list.txt | xargs -d '\n' mv -t /app/dest/

Cảm ơn bạn đã trả lời . với điều này, tôi có thể tạo một danh sách rất nhiều tệp có tên [!] và chuyển sang thư mục khác, với thông tin sau: ls | grep -e ". [!]]" | tee 001.txt; sed 's / ^ * //' <001.txt | xargs -d '\ n' mv -t / Destinypath /
inukaze 14/2/2016

6

Giả sử tên tệp của bạn tương đối lành mạnh (không có dòng mới hoặc ký tự lạ):

while read file; do mv "$file" /app/dest/; done < list.txt 

Để xử lý tên tệp lạ (ngắt nếu tên tệp có dòng mới):

while IFS= read -r file; do mv "$file" /app/dest/; done < list.txt 

Xin chào terdon, làm thế nào để di chuyển các thư mục vào thư mục mới dựa trên trận đấu của chúng trong tệp csv? Bạn có thể vui lòng giúp tôi với [ unix.stackexchange.com/questions/433068/NH Cảm ơn bạn !!
dùng3351523

@ user3351523 câu hỏi của bạn đã bị đóng. Yêu cầu những người ngẫu nhiên giúp đỡ sẽ không thay đổi điều đó. Thay vào đó, hãy chỉnh sửa câu hỏi và giải thích cách các giải pháp trong bản sao không giúp bạn. Nếu một cái gì đó "không hoạt động", giải thích làm thế nào nó thất bại. Các giải pháp nên làm việc cho bạn, vì vậy bạn cần giải thích những gì xảy ra khi bạn thử chúng.
terdon

Tôi đã làm điều đó. bạn có thể xem qua.
dùng3351523

@ user3351523 bạn chưa giải thích lý do tại sao các giải pháp của bản dupe thất bại cho bạn. Và bạn đã không giải thích làm thế nào các câu trả lời bạn đã nhận được thất bại. Bạn có thể chỉ cần sử dụng cp -Hrnhưng tôi không biết nếu OSX cphỗ trợ điều đó.
terdon


1

Xargs thuần đọc trực tiếp từ tập tin

xargs -l -i < flist  mv -v {} /app/dst

chỉnh sửa 1 - sau bình luận của @Anthon bên dưới,

xargs -I{} < flist  mv -v {} /app/dst

1
-ibị phản đối, và nó, hoặc nó thay thế -I ngụ ý -l/ --max-lines=1. Và nó gây ra mvđược thực hiện cho từng tệp riêng biệt.
Anthon

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.