banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix Lệnh replace file trên CentOS  XML
  [Question]   Lệnh replace file trên CentOS 06/06/2011 14:06:01 (+0700) | #1 | 239453
[Avatar]
daudau
Member

[Minus]    0    [Plus]
Joined: 02/09/2006 16:30:39
Messages: 148
Offline
[Profile] [PM]
Chào các bạn,

Giả sử mình có 1 cây thư mục sau:




Nhu cầu đặt ra là tìm và thay thế tất cả file index.html thành file abc.html.

Mong các bạn có thể hỗ trợ.
Cảm ơn smilie
[Up] [Print Copy]
  [Question]   Lệnh replace file trên CentOS 06/06/2011 14:11:10 (+0700) | #2 | 239455
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Bạn tìm đọc về lệnh `find` kết hợp với -exec hay xargs nhé.
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Lệnh replace file trên CentOS 06/06/2011 15:27:44 (+0700) | #3 | 239464
[Avatar]
daudau
Member

[Minus]    0    [Plus]
Joined: 02/09/2006 16:30:39
Messages: 148
Offline
[Profile] [PM]

quanta wrote:
Bạn tìm đọc về lệnh `find` kết hợp với -exec hay xargs nhé. 


Cảm ơn quanta.

Mình thường dùng lệnh sau để chmod hoặc tìm và xoá file:
find /abc -name "index.html" -exec chmod 644 {} \;
find /abc -name "index.html" -exec rm -rf {} \;

Và cũng đã tham khảo man find về tùy chọn -exec nhưng cũng chưa tìm ra cách khắc phục.



[Up] [Print Copy]
  [Question]   Lệnh replace file trên CentOS 06/06/2011 16:05:44 (+0700) | #4 | 239471
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Giờ thay vì dùng `chmod`, `rm`, ... thì bạn dùng `mv`.
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Lệnh replace file trên CentOS 06/06/2011 16:29:09 (+0700) | #5 | 239472
neverwon
Member

[Minus]    0    [Plus]
Joined: 08/08/2006 13:38:43
Messages: 89
Offline
[Profile] [PM]
#step 1: replace content của file index.html bởi content của file abc.html
find /abc -name "index.html" -exec mv /path/abc.html {} \;

#step 2: đổi tên file index.html thành abc.html
find /abc -name "index.html" -exec rename index.html abc.html {} \;

Liệu như thế này đã đáp ứng được yêu cầu bài toán đặt ra chưa nhỉ?

[Up] [Print Copy]
  [Question]   Lệnh replace file trên CentOS 08/06/2011 10:54:14 (+0700) | #6 | 239699
[Avatar]
daudau
Member

[Minus]    0    [Plus]
Joined: 02/09/2006 16:30:39
Messages: 148
Offline
[Profile] [PM]

neverwon wrote:
#step 1: replace content của file index.html bởi content của file abc.html
find /abc -name "index.html" -exec mv /path/abc.html {} \;

#step 2: đổi tên file index.html thành abc.html
find /abc -name "index.html" -exec rename index.html abc.html {} \;

Liệu như thế này đã đáp ứng được yêu cầu bài toán đặt ra chưa nhỉ?

 

Câu lệnh ở bước 1:
Mình thử và có kết quả như sau.

find /abc -name "index.html" -exec mv /path/abc.html {} \;
=> mv: cannot stat `/path/abc.html': No such file or directory 


(Trong trường hợp chỉ có 1 file index.html thì tốt - Nhưng ở đây mình có nhiều file index.html cần replace. Nếu dùng lệnh mv thì ở kết quả thứ 2 báo ko tồn tại file vì file gốc đã bị xoá ở lần thực hiện đầu tiên)
Đã thay thế tham số:
find a -name "index.html" -exec cp -f /path/abc.html {} \; 

-> Thì không trả ra kết quả gì hết. (trên CentOS chỉ cho cp overwrite trùng tên thôi thì phải, mình thử cp overwrite khác tên thì không thấy chạy)

find /abc -name "index.html" -exec rename index.html abc.html {} \;
Kết quả này thì thu được như mong đợi.
[Up] [Print Copy]
  [Question]   Lệnh replace file trên CentOS 08/06/2011 11:30:58 (+0700) | #7 | 239700
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

daudau wrote:

Câu lệnh ở bước 1:
Mình thử và có kết quả như sau.

find /abc -name "index.html" -exec mv /path/abc.html {} \;
=> mv: cannot stat `/path/abc.html': No such file or directory 

(Trong trường hợp chỉ có 1 file index.html thì tốt - Nhưng ở đây mình có nhiều file index.html cần replace. Nếu dùng lệnh mv thì ở kết quả thứ 2 báo ko tồn tại file vì file gốc đã bị xoá ở lần thực hiện đầu tiên)
Đã thay thế tham số:
find a -name "index.html" -exec cp -f /path/abc.html {} \; 

-> Thì không trả ra kết quả gì hết. (trên CentOS chỉ cho cp overwrite trùng tên thôi thì phải, mình thử cp overwrite khác tên thì không thấy chạy)
 

/path/to/abc.html được hiểu là: đường dẫn đến file abc.html. Nếu muốn dùng thì bạn phải thay đường dẫn thật vào đó.

daudau wrote:

find /abc -name "index.html" -exec rename index.html abc.html {} \;
Kết quả này thì thu được như mong đợi.
 

Bạn thử ngâm cứu thêm cách dùng `mv` nữa xem.
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Lệnh replace file trên CentOS 08/06/2011 13:06:50 (+0700) | #8 | 239708
neverwon
Member

[Minus]    0    [Plus]
Joined: 08/08/2006 13:38:43
Messages: 89
Offline
[Profile] [PM]

find /abc -name "index.html" -exec cp -f /path/abc.html {} \;
 


Lệnh này hoạt đồng bình thường mà? (tham số -f không cần thiết)

@quanta: trong trường hợp xài lệnh mv, file abc.html gốc sẽ bị remove ngay sau khi tìm thấy file index.html đầu tiên. Vì vậy, khi tìm thấy file index.html thứ 2, hễ thống sẽ báo lỗi không tìm thấy file abc.html gốc smilie
[Up] [Print Copy]
  [Question]   Lệnh replace file trên CentOS 08/06/2011 14:27:12 (+0700) | #9 | 239715
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Nếu mình hiểu đúng thì ý bạn chủ topic là trường hợp thứ 2 mà bạn nói (nghĩa là đơn thuần chỉ đổi tên file thôi), chứ không phải trường hợp 1 đâu.

PS: dùng 'step', bạn chủ topic lại hiểu là cần phải thực hiện cả 2 bước này mới đạt được yêu cầu cũng nên.
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Lệnh replace file trên CentOS 10/06/2011 14:58:23 (+0700) | #10 | 240112
[Avatar]
daudau
Member

[Minus]    0    [Plus]
Joined: 02/09/2006 16:30:39
Messages: 148
Offline
[Profile] [PM]

quanta wrote:
Nếu mình hiểu đúng thì ý bạn chủ topic là trường hợp thứ 2 mà bạn nói (nghĩa là đơn thuần chỉ đổi tên file thôi), chứ không phải trường hợp 1 đâu.

PS: dùng 'step', bạn chủ topic lại hiểu là cần phải thực hiện cả 2 bước này mới đạt được yêu cầu cũng nên. 


Cảm ơn quanta & neverwon

Sorry nếu lời văn của mình chưa được mạch lạc lắm smilie

Mình hiểu và làm đúng hướng dẫn của bạn: neverwon

Nhưng không hiểu sao neverwon test lại được. Nhưng mình test thì lại không.

Mình dùng CentOS 5.4
Và đây là kết quả test:




Mô tả:
a là 1 thư mục nằm ngoài root.
trong a có file index.html và folder b
trong b có file index.html

file abc.html được đặt nằm ngoài root.
/root/abc.html
[Up] [Print Copy]
  [Question]   Lệnh replace file trên CentOS 10/06/2011 15:41:15 (+0700) | #11 | 240136
neverwon
Member

[Minus]    0    [Plus]
Joined: 08/08/2006 13:38:43
Messages: 89
Offline
[Profile] [PM]
Bạn kiểm tra lại nội dung file index.html sau khi thự thi lệnh find..., so sánh nó với file index.html gốc và so sánh với nó với file abc.html smilie

Sau khi kiểm tra, bạn sẽ hiểu tại sao tôi đưa ra 2 bước thực hiện smilie
[Up] [Print Copy]
  [Question]   Lệnh replace file trên CentOS 10/06/2011 15:52:34 (+0700) | #12 | 240143
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

neverwon wrote:
Bạn kiểm tra lại nội dung file index.html sau khi thự thi lệnh find..., so sánh nó với file index.html gốc và so sánh với nó với file abc.html smilie

Sau khi kiểm tra, bạn sẽ hiểu tại sao tôi đưa ra 2 bước thực hiện smilie 

Bạn chủ topic chỉ muốn đổi tên file thôi, không liên quan gì đến nội dung cả. Bạn lại ghi là "step 1, step 2" nên bạn ấy hiểu nhầm là đúng rồi còn gì nữa.
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Lệnh replace file trên CentOS 10/06/2011 16:03:14 (+0700) | #13 | 240147
neverwon
Member

[Minus]    0    [Plus]
Joined: 08/08/2006 13:38:43
Messages: 89
Offline
[Profile] [PM]
1. Nếu chỉ đổi nội dung file (giữ nguyên tên file): Chỉ thực hiện bước 1
2. Nếu chỉ đổi tên file (giữ nguyên nội dung file): Chỉ thực hiện bước 2
3. Nếu muốn replace (thay thế file, theo tôi hiểu là đổi cả nội dung và tên file): Thực hiện bước 1 trước, sau đó thực hiện bước 2.

[Up] [Print Copy]
  [Question]   Lệnh replace file trên CentOS 10/06/2011 16:07:00 (+0700) | #14 | 240148
[Avatar]
daudau
Member

[Minus]    0    [Plus]
Joined: 02/09/2006 16:30:39
Messages: 148
Offline
[Profile] [PM]

neverwon wrote:
Bạn kiểm tra lại nội dung file index.html sau khi thự thi lệnh find..., so sánh nó với file index.html gốc và so sánh với nó với file abc.html smilie

Sau khi kiểm tra, bạn sẽ hiểu tại sao tôi đưa ra 2 bước thực hiện smilie 



Thế là bài toán của mình đã được giải [ nhờ quanta & neverwon hỗ trợ nhiệt tình ].

Xin cảm ơn và chúc các bạn sức khoẻ và thành công.
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|