সিপি কমান্ডের সাহায্যে একটি ডিরেক্টরি কেন মূলের চেয়ে ছোট?


18

আমি বড় বড় সংখ্যক ফাইলের সাথে একটি ডিরেক্টরি অন্য গন্তব্যে অনুলিপি করতে চেষ্টা করছি। আমি করেছিলাম:

cp -r src_dir another_destination/

তারপরে আমি নিশ্চিত করতে চেয়েছিলাম যে গন্তব্য ডিরেক্টরিটির আকারটি মূলের মতোই:

du -s src_dir
3782288 src_dir

du -s another_destination/src_dir
3502320 another_destination/src_dir

তারপরে আমার ধারণা ছিল যে এখানে বেশ কয়েকটি প্রতীকী লিঙ্ক থাকতে পারে যা cpআদেশটি অনুসরণ করে এবং -aপতাকাটি যুক্ত করে :

-পিপিআর বিকল্প হিসাবে একই। ফাইলের কাঠামো এবং বৈশিষ্ট্যগুলি সংরক্ষণ করে তবে ডিরেক্টরি কাঠামো নয়।

cp -a src_dir another_destination/

তবে du -sআমাকে একই ফলাফল দিয়েছে। এটি আকর্ষণীয় যে উত্স এবং গন্তব্য উভয়েরই ফাইল এবং ডিরেক্টরিগুলির সংখ্যা একই রয়েছে:

tree src_dir | wc -l
    4293

tree another_destination/src_dir | wc -l
    4293

আমি কী ভুল করছি যে duকমান্ডটি দিয়ে আমি বিভিন্ন আকার পেয়েছি ?

হালনাগাদ

duকমান্ডটি দিয়ে যখন আমি পৃথক ডিরেক্টরিগুলির আকারের চেষ্টা করি তখন আমি বিভিন্ন ফলাফল পাই:

du -s src_dir/sub_dir1
1112    src_dir/sub_dir1

du -s another_destination/src_dir/sub_dir1
1168    another_destination/src_dir/sub_dir1

আমি যখন ফাইলগুলি সাথে দেখি ls -la, পৃথক ফাইলের আকারগুলি একই হয় তবে মোট পরিমাণ আলাদা হয়:

ls -la src_dir/sub_dir1
total 1168
drwxr-xr-x     5 hirurg103  staff     160 Jan 30 20:58 .
drwxr-xr-x  1109 hirurg103  staff   35488 Jan 30 21:43 ..
-rw-r--r--     1 hirurg103  staff  431953 Jan 30 20:58 file1.pdf
-rw-r--r--     1 hirurg103  staff  126667 Jan 30 20:54 file2.png
-rw-r--r--     1 hirurg103  staff    7386 Jan 30 20:49 file3.png

ls -la another_destination/src_dir/sub_dir1
total 1112
drwxr-xr-x     5 hirurg103  staff     160 Jan 30 20:58 .
drwxr-xr-x  1109 hirurg103  staff   35488 Jan 30 21:43 ..
-rw-r--r--     1 hirurg103  staff  431953 Jan 30 20:58 file1.pdf
-rw-r--r--     1 hirurg103  staff  126667 Jan 30 20:54 file2.png
-rw-r--r--     1 hirurg103  staff    7386 Jan 30 20:49 file3.png

1
আকর্ষণীয় প্রশ্ন। উত্স এবং গন্তব্যগুলি বিভিন্ন ড্রাইভ / আই ওয়াইন্ডার যদি এটি ফাইল সিস্টেমগুলির ব্লকের আকারে নেমে আসে।
ডেভিডগো

হাই @ ডেভিডগো, উত্স এবং গন্তব্য একই ড্রাইভের বিভিন্ন ডিরেক্টরি। আমি ls -laফলাফল সঙ্গে প্রশ্ন আপডেট । আপডেট
হিরুরগ 103

2
কি ফাইল সিস্টেম? এগুলি হতে পারে যে ডিরেক্টরিগুলি সেগুলি করার প্রয়োজনের তুলনায় বড় (আরও স্থান গ্রহণ করুন)। এই প্রশ্নের তুলনা করুন । দ্বারা নির্মিত নতুন ডিরেক্টরিগুলি cpযেমন প্রয়োজন তত বড়।
কামিল ম্যাকিয়েরোভস্কি

ls -lsফাইলগুলি কত ডিস্ক স্পেস ব্যবহার করছে তা দেখতে ব্যবহার করুন।
বার্মার

1
recursive md5sum হ'ল আপনার বন্ধু যখন আপনাকে যাচাই করতে হবে যে সমস্ত ফাইল আসলে অনুলিপি করা হয়েছে এবং সামগ্রীগুলি একই। আরএসআইএনসি হ'ল একটি সরঞ্জাম যা পুরো কাঠামো এবং ফাইলগুলি উভয়ই অনুলিপি করতে ও যাচাই করতে পারে, যদি কিছু ফাইল ইতিমধ্যে উপস্থিত থাকে তবে প্রক্রিয়াটি গতি বাড়ায়।
GoFundMonica - codidact.org

উত্তর:


21

এটি কারণ duডিফল্টরূপে ফাইল (গুলি) এর আকার নয়, তবে তারা যে ডিস্কের স্থানটি ব্যবহার করছেন তা দেখায়। -bমোট ব্যবহৃত ডিস্ক জায়গার পরিবর্তে আপনার ফাইল আকারের যোগফল পেতে বিকল্পটি ব্যবহার করতে হবে। উদাহরণ স্বরূপ:

% printf test123 > a
% ls -l a
-rw-r--r-- 1 mnalis mnalis 7 Feb  1 19:57 a
% du -h a
4,0K    a
% du -hb a
7       a

ফাইলটি মাত্র 7 বাইট দীর্ঘ হলেও, এটি পুরো 4096 বাইট ডিস্কের স্থান দখল করবে (আমার বিশেষ উদাহরণে; এটি ব্যবহৃত ফাইল সিস্টেম, ক্লাস্টারের আকারের উপর নির্ভর করে পৃথক হবে)।

এছাড়াও, কিছু ফাইল সিস্টেমগুলি তথাকথিত স্পার্স ফাইলগুলিকে সমর্থন করে, যা সমস্ত জিরো ব্লকগুলির জন্য কোনও ডিস্ক স্থান ব্যবহার করে না। উদাহরণ স্বরূপ:

% dd if=/dev/zero of=regular.bin bs=4k count=10
10+0 records in
10+0 records out
40960 bytes (41 kB, 40 KiB) copied, 0,000131003 s, 313 MB/s
% cp --sparse=always regular.bin sparse.bin
% ls -l *.bin
-rw-r--r-- 1 mnalis mnalis 40960 Feb  1 20:04 regular.bin
-rw-r--r-- 1 mnalis mnalis 40960 Feb  1 20:04 sparse.bin
% du -h *.bin
40K     regular.bin
0       sparse.bin
% du -hb *.bin
40960   regular.bin
40960   sparse.bin

সংক্ষেপে, সমস্ত ফাইল অনুলিপি করা হয়েছে যাচাই করার জন্য, আপনি du -sbপরিবর্তে ব্যবহার করতে চাই du -s


1
কেবল ছড়িয়ে ছিটিয়ে থাকা ফাইলই নয় সংক্ষেপিত ফাইল এবং ইনলাইন ফাইল / আবাসিক ফাইলগুলিও ডিস্কের আকার ফাইলের আকারের চেয়ে ছোট হয়ে যায়
phuclv

1
এবং বিটিআরএফস / জেডএফএসে অদ্ভুত ফলাফল।
বলেছেন মনিকাকে পুনরায়

2
@ ওভাল: বিটিআরএফএস সংকোচনের ফলে duআউটপুট প্রভাবিত হয় না : এটি কমপ্রেস করা ফাইলগুলিকে এমন প্রোগ্রামগুলিতে বিচ্ছিন্ন দেখাবে যা দৈর্ঘ্যের স্বাভাবিক অ্যালগরিদম ব্যবহার করে! = ব্যবহৃত ব্লক। btrfs.wiki.kernel.org/index.php/…
পিটার

@ পিটারকার্ডস কিন্তু কো স্টাফ দু'টি আউটপুটকে বেশ বোকামি করে তোলে।
বলছে মনিকাকে

নকল ফাইলগুলি সম্পর্কে কী? আধুনিক সিস্টেমগুলি নকল সামগ্রী সনাক্ত করে স্থান সংরক্ষণ করতে পারে না?
ফ্রিসফটওয়্যার সার্ভার 21

12

এটি ডিরেক্টরি "ফাইল" এর আকারের কারণে হতে পারে।

বেশিরভাগ ফাইল সিস্টেমে, ডিস্কে, ডিরেক্টরিটি হ'ল নিয়মিত ফাইলের মতো (বেশিরভাগ নাম এবং নোড সংখ্যাগুলির তালিকা সহ, বেশিরভাগ) আরও বেশি ব্লকগুলি বাড়ার সাথে ব্যবহার করে।

আপনি যদি অনেকগুলি ফাইল যুক্ত করেন তবে ডিরেক্টরি নিজেই বৃদ্ধি পায়। তবে আপনি যদি পরে সেগুলি সরিয়ে থাকেন তবে অনেকগুলি ফাইল সিস্টেমে ডিরেক্টরিটি সঙ্কুচিত হবে না।

সুতরাং আপনার মূল গাছের ডিরেক্টরিগুলির মধ্যে যদি কোনও এক পর্যায়ে অনেকগুলি ফাইল থাকে, যা পরে মুছে ফেলা হয়, তবে সেই ডিরেক্টরিটির অনুলিপি "ছোট" হবে, কারণ এটি ফাইলের বর্তমান সংখ্যার জন্য প্রয়োজনীয় যতগুলি ব্লক ব্যবহার করে।

আপনার আপডেটের তালিকাগুলিতে 3 টি ডিরেক্টরি রয়েছে যা আপনি তালিকাবদ্ধ করেন নি। আপনার ls -alআউটপুটে তাদের (বা এর বংশধরের) মাপের তুলনা করুন ।

পার্থক্যটি কোথায় তা খুঁজে পেতে, আপনি ls -alrউভয় ডিরেক্টরিতে চেষ্টা করতে পারেন , একটি ফাইলে পুনঃনির্দেশিত, এবং তারপরে diffদুটি আউটপুটগুলির একটি।


1
অন্য সম্ভাবনার জন্য ভাল ক্যাচ! তবে ওপিএসের ক্ষেত্রে cp -a src_dir another_destination/এটি অসম্ভব, যেমনটি another_destionationনতুনভাবে তৈরি করা হয়েছিল এবং এইভাবে অনুকূলিত করা হবে, যখন src_dir(যা অতীতের সৃষ্টি / সংযোজন থেকে কিছু বড় ডিরেক্টরি থাকতে পারে) প্রকৃতপক্ষে প্রয়োজনের চেয়ে বড় হতে পারে। তবে ফলাফলগুলি দেখায় যে src_dirআসলে ছোট ( 1112 < 1168)।
মাতিজা নালিস

@ মাতিজা নালিস "আপডেট" এর পরে কেবল প্রথম উদাহরণটি দেখায় যে (1112 <1168) ... নীচের উদাহরণে যে পরিসংখ্যানগুলি উল্টে গেছে এবং প্রথম উদাহরণটি উত্সটি আরও বড় দেখায় (3782288 বনাম 3502320)। সম্ভবত ওপি দ্বারা একটি টাইপো?
ট্রিপহাউন্ড

> In the listings in your update, there are 3 directories you haven't listed। আসলে এগুলি ফাইল, ডিরেক্টরি নয়। ফাইলের নামগুলি দেখুন > if one of the directories in your original tree had many files at some point, which were later deleted। আমি
রিসাইঙ্ক

1
@ হিরুরগ ১০৩৩ .এন্ট্রি ইনোডে পাঁচটি লিঙ্ক দেখায়। একটি হ'ল প্যারেন্ট ডিরেক্টরি থেকে এটির লিঙ্ক। আরেকটি হ'ল .। আরও 3 টি লিঙ্ক রয়েছে, যা ..সাব-ডিরেক্টরি থেকে লিঙ্ক হওয়া উচিত । যদি আমি খুব অদ্ভুত কিছু মিস করি না তবে এগুলিতে অবশ্যই 3 টি সাব-ডাইরেক্টরি থাকতে হবে। আপনি কি বলছেন যে সেই তালিকাগুলি সম্পূর্ণ আউটপুট?
jcaron
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.