ให้ diff สร้างไฟล์ใหม่ แต่ไม่ลบไฟล์ที่มีอยู่


1

บางทีฉันอาจขาดหายไป แต่ฉันต้องการความแตกต่างระหว่างสองไดเรกทอรีเพื่อสร้างไฟล์ที่ไม่มีอยู่ แต่ไม่ลบไฟล์ที่ทำ ดังนั้นให้บางสิ่งเช่น:

./a/foo
./b/bar

คำสั่งนี้:

diff -urN a b

จะแสดง:

diff -urN a/bar b/bar
--- a/bar       1969-12-31 17:00:00.000000000 -0700
+++ b/bar       2012-05-22 10:09:05.221356000 -0600 @@ -0,0 +1 @@
+bar 
diff -urN a/foo b/foo
--- a/foo       2012-05-22 10:08:54.133138000 -0600
+++ b/foo       1969-12-31 17:00:00.000000000 -0700 @@ -1 +0,0 @@
-Foo

สิ่งที่ฉันต้องการคือสิ่งนี้:

diff -urN a/bar b/bar
--- a/bar       1969-12-31 17:00:00.000000000 -0700
+++ b/bar       2012-05-22 10:09:05.221356000 -0600 @@ -0,0 +1 @@
+bar

ฉันต้องการไฟล์ใหม่ที่อยู่ในแต่ไม่ที่จะสร้าง แต่ไฟล์ที่อยู่ในแต่ไม่ละเว้น เป็นไปได้ด้วย diff?

ขอบคุณ!


ฉันเข้าใจว่าทำไมพฤติกรรมในปัจจุบันจึงสมเหตุสมผลฉันแค่สงสัยว่ามีวิธีอื่นเช่นกัน
Christoph

คำตอบ:


1

ผมคิดว่าคุณกำลังมองหา GNU diff ของธงแทน--unidirectional-new-file-N

diff -ur --unidirectional-new-file a/bar b/bar
--- a/bar   1969-12-31 19:00:00.000000000 -0500
+++ b/bar   2012-05-22 12:39:33.000000000 -0400
@@ -0,0 +1 @@
+bar
Only in a: foo

หากคุณต้องการคุณสามารถส่งออกท่อgrep -v '^Only in'เพื่อกำจัดบรรทัดสุดท้าย แต่ไม่ควรปล่อยให้มีอะไรเสียหาย


ว้าวฉันจะคิดถึงมันอย่างไร ฉันเห็นตัวเลือกนั้นและอ่านและด้วยเหตุผลบางอย่างที่ใจของฉันทำมันออกมาเพื่อพูดสิ่งที่ตรงกันข้ามกับสิ่งที่พูด ขอบคุณ!
Christoph

ที่จริงแล้วมันใช้งานได้ในทางที่ผิด เมื่อฉันทำเช่นนั้นจะพยายามสร้างแถบใน b ซึ่งมีอยู่แล้ว ฉันไม่สามารถทำ -R ได้เหมือนกันเนื่องจากคนอื่นทำงานได้ดี ความคิดใด ๆ
Christoph

ฉันคิดว่าฉันเข้าใจผิดบางอย่าง ดูเหมือนว่าคุณกำลังสร้างชุดข้อมูลแก้ไขเพื่อเปลี่ยนเป็น b จากนั้นนำไปใช้กับไดเรกทอรีที่มีลักษณะคล้ายกับ b มากกว่าที่จะเป็น a
Jander
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.