টি এল; ডিআর
find /my/dir/ -printf "%P\n" | tar -czf mydir.tgz --no-recursion -C /my/dir/ -T -
কিছু শর্ত সহ (কেবল ফাইল, ডায়ার এবং সিমলিংক সংরক্ষণাগার):
find /my/dir/ -printf "%P\n" -type f -o -type l -o -type d | tar -czf mydir.tgz --no-recursion -C /my/dir/ -T -
ব্যাখ্যা
নীচে দুর্ভাগ্যক্রমে ./সংরক্ষণাগারটিতে একটি পিতামহিত ডিরেক্টরি অন্তর্ভুক্ত রয়েছে :
tar -czf mydir.tgz -C /my/dir .
--transformকনফিগারেশন বিকল্পটি ব্যবহার করে আপনি ডিরেক্টরিটি থেকে সমস্ত ফাইল সরিয়ে নিতে পারেন , তবে এটি .ডিরেক্টরি থেকে নিজেকে মুক্তি দেয় না । কমান্ডকে দমন করা ক্রমশ কঠিন হয়ে পড়েছে।
আপনি $(find ...)কমান্ডটিতে ফাইল তালিকা যুক্ত করতে ব্যবহার করতে পারেন ( ম্যাগনাসের উত্তরের মতো ), তবে এটি সম্ভবত একটি "ফাইল তালিকা খুব দীর্ঘ" ত্রুটির কারণ হতে পারে। সর্বোত্তম উপায় হ'ল এটিকে টার এর -Tবিকল্পের সাথে একত্রিত করা :
find /my/dir/ -printf "%P\n" -type f -o -type l -o -type d | tar -czf mydir.tgz --no-recursion -C /my/dir/ -T -
মূলত এটি যা করে তা হ'ল আপনার ডিরেক্টরিতে থাকা সমস্ত ফাইল ( -type f), লিঙ্কগুলি ( -type l) এবং উপ-ডিরেক্টরিগুলি ( -type d) তালিকাভুক্ত করে -printf "%P\n", সমস্ত ফাইলের নাম ব্যবহার করে তুলনামূলকভাবে তৈরি করে , এবং তারপরে তা টার কমান্ডে প্রেরণ করুন (এটি এসটিডিআইএন ব্যবহার করে ফাইলের নাম নেয় -T -)। -Cবিকল্প প্রয়োজন তাই আলকাতরা জানেন যেখানে আপেক্ষিক নামের সাথে ফাইলগুলিকে চিহ্নিত হয়। --no-recursionপতাকা, যাতে আলকাতরা ফোল্ডার এটি (ডুপ্লিকেট ফাইল করে) সংরক্ষণাগার বলা হয় মধ্যে recurse না।
যদি আপনাকে ফাইলের নাম (ফিল্টারিং, সিমলিঙ্কগুলি অনুসরণ করে) এর সাথে বিশেষ কিছু করার দরকার হয় তবে findকমান্ডটি বেশ শক্তিশালী এবং tarউপরের কমান্ডের অংশটি সরিয়ে আপনি এটি পরীক্ষা করতে পারেন :
$ find /my/dir/ -printf "%P\n" -type f -o -type l -o -type d
> textfile.txt
> documentation.pdf
> subfolder2
> subfolder
> subfolder/.gitignore
উদাহরণস্বরূপ, যদি আপনি পিডিএফ ফাইলগুলি ফিল্টার করতে চান তবে অ্যাড করুন ! -name '*.pdf'
$ find /my/dir/ -printf "%P\n" -type f ! -name '*.pdf' -o -type l -o -type d
> textfile.txt
> subfolder2
> subfolder
> subfolder/.gitignore
নন-জিএনইউ অনুসন্ধান করুন
কমান্ডটি ব্যবহার করে printf(জিএনইউতে উপলব্ধ find) যা সম্পর্কিত findফলাফলগুলি সহ এর ফলাফলগুলি মুদ্রণ করতে বলে । তবে আপনার যদি জিএনইউ না থাকে তবে findএটি পাথগুলি আপেক্ষিক করে তুলতে কাজ করে (এর সাথে পিতামাতাকে সরিয়ে দেয় sed):
find /my/dir/ -type f -o -type l -o -type d | sed s,^/my/dir/,, | tar -czf mydir.tgz --no-recursion -C /my/dir/ -T -
tar -czf? আমার ক্ষেত্রে এটি কেবল ফাইলগুলি সঞ্চয় করে থাকে ডিরেক্টরিটি নয়। যখন আমি কেবলtarডিরেক্টরিটি অন্তর্ভুক্ত করি তবেtar -czfএটি কেবল ফাইল যুক্ত করে।