কেবলমাত্র বাইনারি ফাইলগুলি bash
ব্যবহার করে প্রক্রিয়া করার একটি সাধারণ সমাধান file -b --mime-encoding
:
while IFS= read -d '' -r file; do
[[ "$(file -b --mime-encoding "$file")" = binary ]] &&
{ echo "Skipping $file."; continue; }
echo "Processing $file."
# ...
done < <(find . -type f -print0)
আমি ফাইলটি ইউটিলিটির লেখকের সাথে যোগাযোগ করেছি এবং তিনি -00
5.26 সংস্করণে একটি নিফটি প্যারামিটার যুক্ত করেছেন (2016-04-16 প্রকাশিত, উদাহরণস্বরূপ বর্তমান আর্চ এবং উবুন্টু 16.10) যা file\0result\0
একাধিক ফাইলের জন্য এটি একবারে খাওয়ানো হয়, এইভাবে আপনি এটি করতে পারেন উদাহরণ:
find . -type f -exec file -00 --mime-encoding {} + |
awk 'BEGIN{ORS=RS="\0"}{if(NR%2)f=$0;else if(!/binary/)print f}' | …
( awk
অংশটি হ'ল প্রতিটি ফাইল ফিল্টার করে যা নন-বাইনারি নয় ORS
is আউটপুট বিভাজক।
অবশ্যই একটি লুপ ব্যবহার করা যেতে পারে:
while IFS= read -d '' -r file; do
echo "Processing $file."
# ...
done < <(find . -type f -exec file -00 --mime-encoding {} + |
awk 'BEGIN{ORS=RS="\0"}{if(NR%2)f=$0;else if(!/binary/)print f}')
এর ভিত্তিতে এবং পূর্ববর্তী আমি bash
বাইনারি ফাইলগুলি ফিল্টার করার জন্য একটি ছোট স্ক্রিপ্ট তৈরি করেছি যা এর নতুন সংস্করণগুলিতে -00
প্যারামিটার ব্যবহার করে নতুন পদ্ধতিটি ব্যবহার করে file
এবং পুরানো সংস্করণগুলিতে আগের পদ্ধতিতে ফিরে যায়:
#!/bin/bash
# Expects files as arguments and returns the ones that do
# not appear to be binary files as a zero-separated list.
#
# USAGE:
# filter_binary_files.sh [FILES...]
#
# EXAMPLE:
# find . -type f -mtime +5 -exec ./filter_binary_files.sh {} + | xargs -0 ...
#
[[ $# -eq 0 ]] && exit
if [[ "$(file -v)" =~ file-([1-9][0-9]|[6-9]|5\.([3-9][0-9]|2[6-9])) ]]; then
file -00 --mime-encoding -- "$@" |
awk 'BEGIN{ORS=RS="\0"}{if(NR%2)f=$0;else if(!/binary/)print f}'
else
for f do
[[ "$(file -b --mime-encoding -- "$f")" != binary ]] &&
printf '%s\0' "$f"
done
fi
বা এখানে আরও একটি পসিক্স-ওয়াই রয়েছে তবে এর জন্য সমর্থন প্রয়োজন sort -V
:
#!/bin/sh
# Expects files as arguments and returns the ones that do
# not appear to be binary files as a zero-separated list.
#
# USAGE:
# filter_binary_files.sh [FILES...]
#
# EXAMPLE:
# find . -type f -mtime +5 -exec ./filter_binary_files.sh {} + | xargs -0 ...
#
[ $# -eq 0 ] && exit
if [ "$(printf '%s\n' 'file-5.26' "$(file -v | head -1)" | sort -V)" = \
'file-5.26' ]; then
file -00 --mime-encoding -- "$@" |
awk 'BEGIN{ORS=RS="\0"}{if(NR%2)f=$0;else if(!/binary/)print f}'
else
for f do
[ "$(file -b --mime-encoding -- "$f")" != binary ] &&
printf '%s\0' "$f"
done
fi
file
ফাইলটি ডেটা বা পাঠ্য কিনা তা সনাক্ত করতে আপনি নিজের স্ক্রিপ্ট / পাইপলাইনের কোনও জায়গায় ইউটিলিটিটি ব্যবহার করতে পারেন