নামে
আপনি সংরক্ষণাগারে ফাইলগুলির তালিকা তৈরি করতে এবং সেগুলি মুছতে পারেন, যদিও এটি বিরক্তিকরভাবে মঞ্চবিহীনভাবে আনজিপ বা 7z এর মতো সংরক্ষণাগারগুলির সাথে ফাইলগুলির নামগুলির একটি সরল তালিকা উত্পন্ন করার বিকল্প নেই। এমনকি টার সহ, এটি ধরে নেওয়া হয় যে ফাইলের নামে কোনও নতুন লাইন নেই।
tar tf foo.tar | while read -r file; do rm -- "$file" done
unzip -l foo.zip | awk '
p && /^ --/ {p=2}
p==1 {print substr($0, 29)}
/^ --/ {++p}
' | while …
unzip -l foo.zip | tail -n +4 | head -n -2 | while … # GNU coreutils only
7z l -slt foo.zip | sed -n 's/^Path = //p' | while … # works on tar.*, zip, 7z and more
ফাইলগুলি অপসারণের পরিবর্তে আপনি এগুলিকে তাদের পছন্দসই গন্তব্যে নিয়ে যেতে পারেন।
tar tf foo.tar | while read -r file; do
if [ -d "$file" ]; then continue; fi
mkdir -p "/intended/destination/${file%/*}"
mv -- "$file" "/intended/destination/$file"
done
FUSE ব্যবহার করে
বাহ্যিক সরঞ্জামগুলির উপর নির্ভর করে পরিবর্তে, আপনি (বেশিরভাগ সংযোগে) সাধারণ ফাইল সিস্টেম কমান্ড ব্যবহার করে সংরক্ষণাগারগুলি পরিচালনা করতে FUSE ব্যবহার করতে পারেন ।
আপনি জিপটিতে উঁকি দেওয়ার জন্য এটি ফিউজ-জিপ ব্যবহার করতে পারেন , এটি দিয়ে উত্তোলন করতে পারেন cp
, এর সামগ্রীগুলি এর সাথে তালিকাবদ্ধ করতে পারেন find
ইত্যাদি can
mkdir /tmp/foo.d
fuse-zip foo.zip /tmp/foo.d
## Remove the files that were extracted mistakenly (GNU/BSD find)
(cd /tmp/foo.d && find . \! -type d -print0) | xargs -0 rm
## Remove the files that were extracted mistakenly (zsh)
rm /tmp/foo.d/**(:"s~/tmp/foo.d/~~"^/)
## Extract the contents where you really want them
cp -Rp /tmp/foo.d /intended/destination
fusermount -u foo.d
rmdir foo.d
এভিএফএস আপনার সম্পূর্ণ ডিরেক্টরি হায়ারার্কির একটি দৃশ্য তৈরি করে যেখানে সমস্ত সংরক্ষণাগারটিতে একটি সম্পর্কিত ডিরেক্টরি রয়েছে (শেষের দিকে # টি দিয়ে একই নাম) যা সংরক্ষণাগার সামগ্রীটি উপস্থিত রয়েছে বলে মনে হয়।
mountavfs
## Remove the files that were extracted mistakenly (GNU/BSD find)
(cd ~/.avfs/"$PWD/foo.zip#" && find . \! -type d -print0) | xargs -0 rm
## Remove the files that were extracted mistakenly (zsh)
rm ~/.avfs/$PWD/foo.zip\#/**/*(:"s~$HOME/.avfs/$PWD/foo.zip#~~"^/)
## Extract the contents where you really want them
cp -Rp ~/.avfs/"$PWD/foo.zip#" /intended/destination
umountavfs
তারিখ অনুসারে
ধরে নিই যে আপনার উত্তোলনের চেয়ে একই শ্রেণিবিন্যাসে অন্য কোনও ক্রিয়াকলাপ হয়নি, আপনি তাদের সাম্প্রতিক সিটিটাইমে এক্সট্রাক্ট করা ফাইলগুলি বলতে পারেন । আপনি যদি সবেমাত্র জিপ ফাইলটি তৈরি বা সরিয়ে নিয়ে থাকেন তবে আপনি এটিকে একটি কাট অফ হিসাবে ব্যবহার করতে পারেন; অন্যথায় ls -lctr
উপযুক্ত কাটঅফ সময় নির্ধারণ করতে ব্যবহার করুন । আপনি যদি জিপগুলি সরিয়ে না ফেলে তা নিশ্চিত করতে চান তবে কোনও ম্যানুয়াল অনুমোদনের কোনও কারণ নেই: find
এগুলি বাদ দেওয়ার পক্ষে পুরোপুরি সক্ষম। এখানে zsh ব্যবহার করে বা কম্যান্ডের উদাহরণ রয়েছে find
; নোট করুন যে -cmin
এবং -cnewer
প্রাইমারিগুলি পসিক্সে নেই তবে লিনাক্সে উপস্থিত রয়েছে (এবং জিএনইউ খুঁজে পাওয়া অন্যান্য সিস্টেমগুলি), * বিএসডি এবং ওএসএক্স।
find . \! -name '*.zip' -type f -cmin -5 -exec rm {} + # extracted <5 min ago
rm **/*~*.zip(.cm-6) # zsh, extracted ≤5 min ago
find . -type f -cnewer foo.zip -exec rm {} + # created or moved after foo.zip
জিএনইউ ফাইন্ড, ফ্রিবিএসডি এবং ওএসএক্সের সাহায্যে, কাটফট সময় নির্দিষ্ট করার অন্য একটি উপায় হ'ল একটি ফাইল তৈরি করা এবং touch
তার এমটাইমটিকে কাট অফের সাথে সেট করার জন্য ব্যবহার করা।
touch -d … cutoff
find . -type f -newercm cutoff -delete
ফাইলগুলি অপসারণের পরিবর্তে আপনি এগুলিকে তাদের পছন্দসই গন্তব্যে নিয়ে যেতে পারেন। GNU / * BSD / OSX সন্ধানের একটি উপায় এখানে রয়েছে, প্রয়োজন অনুসারে গন্তব্যে ডিরেক্টরি তৈরি করে।
find . \! -name . -cmin -5 -type f -exec sh -c '
for x; do
mkdir -p "$0/${x%/*}"
mv "$x" "$0/$x"
done
' /intended/destination {} +
জেডএস সমতুল্য (প্রায়: এটি একটি সম্পূর্ণ ডিরেক্টরি হায়ারার্কির পুনরুত্পাদন করে, কেবল যে ডিরেক্টরিগুলিতে ফাইল থাকবে):
autoload zmv
mkdir -p ./**/*(/cm-3:s"|.|/intended/destination|")
zmv -Q '(**/)(*)(.cm-3)' /intended/destination/'$1$2'
সতর্কতা, আমি এই উত্তরের বেশিরভাগ কমান্ড পরীক্ষা করে দেখিনি। অপসারণের আগে সর্বদা ফাইলগুলির তালিকা পর্যালোচনা করুন ( echo
প্রথমে রান করুন , তারপরে rm
এটি ঠিক আছে তবে)।