| FD(1) | General Commands Manual | FD(1) |
نام (NAME)
fd - ابزار سریع و ساده برای جستجوی ورودیها در سیستمفایل
خلاصه دستور (SYNOPSIS)
fd [-HIEsiaLp0hV] [-d depth] [-t filetype] [-e ext] [-E exclude] [-c when] [-j num] [-x cmd] [pattern [path...]]
توضیحات (DESCRIPTION)
fd یک جایگزین ساده، سریع و کاربرپسند برای find(1) است.
بهطور پیشفرض fd از عبارات باقاعده برای الگو استفاده میکند. با این حال، میتوان با استفاده از گزینه --glob این رفتار را تغییر داد تا از الگوهای ساده گلوب استفاده شود.
بهطور پیشفرض fd فایلها و دایرکتوریهای پنهان، و همچنین هر فایلی که با قوانین gitignore یا قوانین نادیدهگیری در فایلهای .ignore یا .fdignore مطابقت داشته باشد را نادیده میگیرد.
اگر میخواهید تمام فایلها را در یک دایرکتوری مشخص جستجو کنید، میتوانید از '' یا . بهعنوان الگوی جستجو برای مطابقت با تمام فایلها استفاده کنید. یا میتوانید از گزینه --search-path بهجای پارامتر مکانی برای تعیین مسیر(ها) استفاده کنید.
گزینهها را میتوان در هر کجای خط فرمان مشخص کرد.
گزینهها (OPTIONS)
- -H, --hidden
- شامل کردن فایلها و دایرکتوریهای پنهان در نتایج جستجو (پیشفرض: فایلها و دایرکتوریهای پنهان نادیده گرفته میشوند). این فلگ را میتوان با --no-hidden لغو کرد.
- فایلهای نادیدهگرفتهشده همچنان مستثنی هستند مگر اینکه از --no-ignore یا --no-ignore-vcs نیز استفاده شود.
- -I, --no-ignore
- نمایش نتایج جستجو از فایلها و دایرکتوریهایی که در حالت عادی نادیده گرفته میشدند توسط:
- •
- .gitignore
- •
- .git/info/exclude
- •
- پیکربندی سراسری gitignore (بهطور پیشفرض $HOME/.config/git/ignore)
- •
- .ignore
- •
- .fdignore
- •
- فایل نادیدهگیری سراسری fd (معمولاً $HOME/.config/fd/ignore )
- این فلگ را میتوان با --ignore لغو کرد.
- -u, --unrestricted
- انجام جستجوی نامحدود، شامل فایلهای نادیدهگرفتهشده و پنهان. این گزینه نام مستعاری برای --hidden --no-ignore است.
- --no-ignore-vcs
- نمایش نتایج جستجو از فایلها و دایرکتوریهایی که در حالت عادی توسط فایلهای gitignore نادیده گرفته میشدند، از جمله .gitignore، .git/info/exclude، و پیکربندی سراسری gitignore (core.excludesFile در تنظیمات git، که بهطور پیشفرض $HOME/.config/git/ignore است). این فلگ را میتوان با --ignore-vcs لغو کرد.
- --no-require-git
- عدم الزام به مخزن git برای رعایت فایلهای gitignore. بهطور پیشفرض، fd تنها در صورتی قوانین سراسری gitignore، قوانین .gitignore و قوانین استثنای محلی را رعایت میکند که تشخیص دهد در حال جستجو درون یک مخزن git هستید. این فلگ به شما اجازه میدهد این محدودیت را بردارید تا fd تمام قوانین نادیدهگیری مرتبط با git را صرفنظر از اینکه درون یک مخزن git جستجو میکنید یا خیر رعایت کند. این فلگ را میتوان با --require-git لغو کرد.
- --no-ignore-parent
- نمایش نتایج جستجو از فایلها و دایرکتوریهایی که در حالت عادی توسط فایلهای gitignore در دایرکتوریهای والد نادیده گرفته میشدند.
- -s, --case-sensitive
- انجام جستجوی حساس به حروف بزرگ و کوچک. بهطور پیشفرض، fd از جستجوی غیرحساس به حروف استفاده میکند، مگر اینکه الگو حاوی یک حرف بزرگ باشد (smart case).
- -i, --ignore-case
- انجام جستجوی غیرحساس به حروف بزرگ و کوچک. بهطور پیشفرض، fd از جستجوی غیرحساس به حروف استفاده میکند، مگر اینکه الگو حاوی یک حرف بزرگ باشد (smart case).
- -g, --glob
- انجام جستجوی مبتنی بر الگوهای گلوب بهجای عبارات باقاعده. در صورت ترکیب با گزینه --full-path، میتوان از '**' برای مطابقت با چندین مؤلفه مسیر استفاده کرد.
- --regex
- انجام جستجوی مبتنی بر عبارت باقاعده (پیشفرض). میتوان برای لغو --glob استفاده کرد.
- -F, --fixed-strings
- در نظر گرفتن الگو بهعنوان یک رشته تحتاللفظی (literal string) بهجای عبارت باقاعده. توجه داشته باشید که این گزینه مقایسه زیررشته را نیز انجام میدهد. اگر میخواهید با نام دقیق فایل مطابقت داده شود، استفاده از --glob یا --exact را در نظر بگیرید.
- --exact
- انجام تطابق دقیق. این گزینه معادل --fixed-strings است اما مستلزم آن است که الگو با کل نام فایل (یا مسیر کامل در صورت استفاده از --full-path) مطابقت داشته باشد، نه فقط یک زیررشته. نویسههای خاص regex در الگو مانند نویسههای معمولی در نظر گرفته میشوند. نمیتوان همزمان با --glob یا --fixed-strings استفاده شود.
- --and pattern
- افزودن الگوهای جستجوی الزامی اضافی که همگی باید مطابقت داشته باشند. میتوان چندین الگوی اضافی مشخص کرد. الگوها عبارات باقاعده هستند مگر اینکه از --glob یا --fixed-strings استفاده شود.
- -a, --absolute-path
- نمایش مسیر کامل با شروع از ریشه، در مقایسه با مسیرهای نسبی. این فلگ را میتوان با --relative-path لغو کرد.
- -l, --list-details
- استفاده از فرمت فهرستبندی دقیق مانند 'ls -l'. این در اصل نام مستعاری برای --exec-batch ls -l به همراه برخی گزینههای اضافی 'ls' است. این میتواند برای دیدن متادیتای بیشتر، نمایش مقصدهای پیوند نمادین و دستیابی به ترتیب مرتبسازی قطعی استفاده شود.
- -L, --follow
- بهطور پیشفرض، fd وارد دایرکتوریهای پیوند نمادین (symlink) نمیشود. با استفاده از این فلگ، پیوندهای نمادین نیز پیمایش میشوند. این فلگ را میتوان با --no-follow لغو کرد.
- -p, --full-path
- بهطور پیشفرض، الگوی جستجو تنها با نام فایل (یا نام دایرکتوری) مطابقت داده میشود. با استفاده از این فلگ، pattern با مسیر کامل مطابقت داده میشود.
- -0, --print0
- جداسازی نتایج جستجو با نویسه تهی یا null (بهجای خطوط جدید). برای ارسال لولهای (pipe) نتایج به xargs مفید است.
- --max-results count
- محدود کردن تعداد نتایج جستجو به 'count' و خروج فوری.
- -1
- محدود کردن جستجو به یک نتیجه و خروج فوری. این یک نام مستعار برای --max-results=1 است.
- -q, --quiet
- هنگامی که این فلگ وجود دارد، برنامه چیزی چاپ نمیکند و در صورت وجود حداقل یک نتیجه جستجو، با کد 0 خارج میشود. در غیر این صورت، کد خروج 1 خواهد بود. این عمدتاً برای استفاده در اسکریپتها کاربرد دارد و میتواند سریعتر از بررسی خروجی باشد زیرا جستجو پس از اولین تطابق بلافاصله متوقف میشود. --has-results میتواند بهعنوان نام مستعار استفاده شود.
- --show-errors
- فعال کردن نمایش خطاهای سیستمفایل برای مواردی مانند عدم دسترسی کافی یا پیوندهای نمادین شکسته (dead symlinks).
- --strip-cwd-prefix [when]
- بهطور پیشفرض، زمانی که گزینههای -x/ --exec، -X/ --exec-batch یا -0/ --print0 داده میشوند، مسیرهای نسبی با './' پیشوند میگیرند تا خطر تفسیر مسیری که با '-' شروع میشود بهعنوان گزینه خط فرمان کاهش یابد. از این فلگ برای تغییر این رفتار استفاده کنید. اگر این فلگ بدون مقدار استفاده شود، معادل ارسال "always" است. مقادیر مجاز عبارتند از:
- --one-file-system, --mount, --xdev
- بهطور پیشفرض، fd درخت سیستمفایل را تا جایی که سایر گزینهها تعیین کنند پیمایش میکند. با این فلگ، fd اطمینان حاصل میکند که به سیستمفایلی متفاوت از سیستمی که در آن شروع شده وارد نشود. قابل مقایسه با فیلترهای -mount یا -xdev در find(1).
- -h, --help
- چاپ اطلاعات راهنما.
- -V, --version
- چاپ اطلاعات نسخه.
- -d, --max-depth d
- محدود کردن عمق پیمایش دایرکتوری حداکثر تا d سطح. بهطور پیشفرض، هیچ محدودیتی در عمق جستجو وجود ندارد.
- --min-depth d
- نمایش نتایج جستجو فقط با شروع از عمق مشخصشده. همچنین ببینید: --max-depth و --exact-depth.
- --exact-depth d
- نمایش نتایج جستجو فقط در دقیقاً همان عمق مشخصشده. این یک نام مستعار برای --min-depth <depth> --max-depth <depth> است.
- --prune
- عدم ورود به دایرکتوریهای مطابقتیافته.
- -t, --type filetype
- فیلتر کردن جستجو بر اساس نوع:
- f, file
- فایلهای معمولی (regular files)
- d, dir, directory
- دایرکتوریها
- l, symlink
- پیوندهای نمادین (symbolic links)
- b, block-device
- دستگاههای بلوکی (block devices)
- c, char-device
- دستگاههای نویسهای (character devices)
- s, socket
- سوکتها (sockets)
- p, pipe
- لولههای نامگذاریشده (FIFOs)
- x, executable
- فایلهای اجرایی
- e, empty
- فایلها یا دایرکتوریهای خالی
مثالها:
- جستجو فقط برای فایلها:
fd --type file …
fd -tf …
- یافتن هم فایلها و هم پیوندهای نمادین:
fd --type file --type symlink …
fd -tf -tl …
- یافتن فایلهای اجرایی:
fd --type executable
fd -tx
- یافتن فایلهای خالی:
fd --type empty --type file
fd -te -tf
- یافتن دایرکتوریهای خالی:
fd --type empty --type directory
fd -te -td
- -e, --extension ext
- فیلتر کردن
نتایج
جستجو بر
اساس پسوند
ext. این
گزینه
میتواند
بهطور
مکرر برای
در نظر
گرفتن
چندین
پسوند ممکن
استفاده
شود. بهطور
پیشفرض،
فیلترهای
پسوند هم
برای
فایلها و
هم برای
دایرکتوریها
اعمال
میشوند. از
--type برای
محدود کردن
جستجو به
انواع خاص
استفاده
کنید.
اگر میخواهید فایلهای بدون پسوند را جستجو کنید، میتوانید از عبارت باقاعده '^[^.]+$' بهعنوان یک الگوی جستجوی معمولی استفاده کنید.
- -E, --exclude glob
- مستثنی کردن فایلها/دایرکتوریهایی که با الگوی گلوب مشخصشده مطابقت دارند. این گزینه بر هر منطق نادیدهگیری دیگری ارجحیت دارد. میتوان چندین الگوی استثنا مشخص کرد.
مثالها:
--exclude '*.pyc' --exclude node_modules
- --ignore-contain name
- مستثنی کردن دایرکتوریهایی که (مستقیماً) حاوی نام دادهشده هستند. این گزینه میتواند چندین بار مشخص شود.
- --ignore-file path
- افزودن یک فایل نادیدهگیری سفارشی در فرمت '.gitignore'. این فایلها اولویت پایینی دارند.
- -c, --color when
- اعلام زمان (when) رنگیسازی نتایج جستجو:
- --hyperlink
- تعیین
اینکه آیا
خروجی باید
از کدهای
گریز
ترمینال
برای ایجاد
یک
هایپرلینک
به آدرس
اینترنتی
فایل (file URL) که
به مسیر
اشاره دارد
استفاده
کند یا خیر.
مقدار میتواند auto، always، یا never باشد.
در حال حاضر، پیشفرض "never" است و اگر گزینه بدون آرگومان استفاده شود، "auto" به کار میرود. در آینده ممکن است این به "auto" و "always" تغییر یابد.
- -j, --threads num
- تنظیم تعداد نخها (threads) برای استفاده در جستجو و اجرا (پیشفرض: تعداد هستههای پردازنده موجود).
- -S, --size size
- محدود کردن نتایج بر اساس اندازه فایلها با استفاده از قالب <+-><NUM><UNIT>
- '+'
- اندازه فایل باید بزرگتر یا مساوی این مقدار باشد
- '-'
- اندازه فایل باید کوچکتر یا مساوی این مقدار باشد
اگر نه '+' و نه '-' مشخص نشود، اندازه فایل باید دقیقاً برابر با این مقدار باشد.
- 'NUM'
- اندازه عددی (مانند 500)
- 'UNIT'
- واحد برای NUM. به حروف بزرگ و کوچک حساس نیستند. واحدهای مجاز:
- 'b'
- بایت (bytes)
- 'k'
- کیلوبایت (مبنای ده، 10^3 = 1000 بایت)
- 'm'
- مگابایت
- 'g'
- گیگابایت
- 't'
- ترابایت
- 'ki'
- کیبیبایت (مبنای دو، 2^10 = 1024 بایت)
- 'mi'
- مبیبایت
- 'gi'
- گیبیبایت
- 'ti'
- تبیبایت
- --changed-within date|duration
- فیلتر کردن نتایج بر اساس زمان تغییر فایل. فایلهایی با برچسب زمانی تغییر بزرگتر از آرگومان بازگردانده میشوند. آرگومان میتواند بهصورت یک بازه زمانی (10h, 1d, 35min) یا یک نقطه زمانی خاص با فرمت کامل RFC3339 به همراه منطقه زمانی، بهصورت تاریخ یا تاریخ-زمان در منطقه زمانی محلی (YYYY-MM-DD یا YYYY-MM-DD HH:MM:SS)، یا با پیشوند '@' به همراه تعداد ثانیهها از مبدأ یونیکس (@[0-9]+) ارائه شود. --change-newer-than، --newer یا --changed-after میتوانند بهعنوان نامهای مستعار استفاده شوند.
مثالها:
--changed-within 2weeks --change-newer-than "2018-10-27 10:00:00" --newer 2018-10-27 --changed-after @1704067200
- --changed-before date|duration
- فیلتر کردن نتایج بر اساس زمان تغییر فایل. فایلهایی با برچسب زمانی تغییر کمتر از آرگومان بازگردانده میشوند. آرگومان میتواند بهصورت یک بازه زمانی (10h, 1d, 35min) یا یک نقطه زمانی خاص با فرمت کامل RFC3339 به همراه منطقه زمانی، بهصورت تاریخ یا تاریخ-زمان در منطقه زمانی محلی (YYYY-MM-DD یا YYYY-MM-DD HH:MM:SS)، یا با پیشوند '@' به همراه تعداد ثانیهها از مبدأ یونیکس (@[0-9]+) ارائه شود. --change-older-than یا --older میتوانند بهعنوان نامهای مستعار استفاده شوند.
مثالها:
--changed-before "2018-10-27 10:00:00" --change-older-than 2weeks --older @1704067200
- -o, --owner [user][:group]
- فیلتر کردن فایلها بر اساس کاربر و/یا گروه آنها. قالب: [(user|uid)][:(group|gid)]. هر دو طرف اختیاری است. برای استثنا کردن فایلها، علامت '!' را قبل از هر طرف قرار دهید.
مثالها:
--owner john --owner :students --owner "!john:students"
- -C, --base-directory path
- تغییر دایرکتوری کاری جاری fd به مسیر دادهشده. این بدان معناست که نتایج جستجو نسبت به مسیر پایه دادهشده نمایش داده میشوند. توجه داشته باشید که مسیرهای نسبی که از طریق آرگومان مکانی path یا گزینه --search-path به fd داده میشوند نیز نسبت به این دایرکتوری تفسیر خواهند شد.
- --path-separator separator
- تنظیم جداکننده مسیر برای چاپ مسیرهای فایل. پیشفرض، جداکننده اختصاصی سیستمعامل است ('/' در یونیکس، '\' در ویندوز).
- --search-path search-path
- ارائه مسیرهایی برای جستجو بهعنوان جایگزینی برای آرگومان مکانی path. کاربرد را به شکل زیر تغییر میدهد: ´fd [FLAGS/OPTIONS] --search-path PATH --search-path PATH2 [PATTERN]´
- --format fmt
- مشخص کردن
یک رشته
الگو که
برای چاپ یک
خط به ازای
هر فایل
پیدا شده
استفاده
میشود.
جایگزینهای زیر قبل از چاپ برای هر فایل در رشته جایگذاری میشوند:
- {}
- مسیر (نتیجه جستجوی جاری)
- {/}
- نام پایه (basename)
- {//}
- دایرکتوری والد
- {.}
- مسیر بدون پسوند فایل
- {/.}
- نام پایه بدون پسوند فایل
- {{
- علامت '{' تحتاللفظی (یک توالی فرار)
- }}
- علامت '}' تحتاللفظی (یک توالی فرار)
توجه داشته باشید که میتوانید از "{{" و "}}" برای اسکیپ کردن "{" و "}" استفاده کنید، که بهویژه در صورت نیاز به گنجاندن متن تحتاللفظی یکی از جایگزینهای بالا مفید است.
توجه داشته باشید که تمام آرگومانهای مکانی بعدی بهعنوان آرگومانهای command در نظر گرفته میشوند - نه fd. بنابراین توصیه میشود گزینه -x/--exec در انتهای دستور قرار گیرد. در غیر این صورت، میتوانید آرگومان ';' را برای پایان دادن به فهرست آرگومانها و ادامه گزینههای دیگر fd ارائه دهید. در بیشتر شلها نیاز است ';' اسکیپ شود: '\;'. این گزینه میتواند چندین بار مشخص شود، که در این صورت تمام دستورات برای هر فایل پیدا شده، به همان ترتیبی که ارائه شدهاند اجرا میشوند. در آن صورت، باید برای همه دستورات به جز دستور آخر، آرگومان ';' ارائه شود.
اگر موازیسازی فعال باشد، ترتیبی که دستورات اجرا میشوند نامعین (non-deterministic) است. و حتی با --threads=1، ترتیب توسط سیستمعامل تعیین میشود و ممکن است آن چیزی نباشد که انتظار دارید. بنابراین، توصیه میشود به هیچ ترتیبی از نتایج اتکا نکنید.
قبل از اجرای دستور، هر الگوی جایگزین در دستور با مقادیر متناظر برای فایل جاری جایگزین میشود. همان جایگزینهایی استفاده میشوند که در گزینه --format به کار میروند.
اگر هیچ جایگزینی وجود نداشته باشد، یک "{}" ضمنی در انتها در نظر گرفته میشود.
اگر --print0 نیز داده شود، یک نویسه تهی (\0) بین خروجی برای هر ورودی پیدا شده چاپ خواهد شد. این به برنامه دیگری اجازه میدهد در صورتی که دستور(ها) چندین خط تولید کنند، خروجی هر فایل را بهراحتی تفکیک کند.
مثالها:
- یافتن تمام فایلهای *.zip و استخراج آنها:
fd -e zip -x unzip
- یافتن فایلهای *.h و *.cpp و اجرای "clang-format -i .." برای هر یک از آنها:
fd -e h -e cpp -x clang-format -i
- تبدیل تمام فایلهای *.jpg به فایلهای *.png:
fd -e jpg -x convert {} {.}.png
- اجرای stat برای هر فایل *.txt، جدا شده با نویسههای تهی:
fd -0 -e txt -x stat
ترتیب آرگومانها نامعین است و نباید به آن اتکا شود.
این گزینه از همان جایگزینهای --format و --exec استفاده میکند، اما بهجای یک بار بسط به ازای هر فراخوانی دستور، هر آرگومان حاوی یک جایگزین برای هر فایل در یک دسته بسط مییابد و بهعنوان آرگومانهای جداگانه ارسال میشود.
اگر هیچ جایگزینی وجود نداشته باشد، یک "{}" ضمنی در انتها در نظر گرفته میشود.
مانند --exec، آرگومانهای بعدی بخشی از command فرض میشوند تا زمانی که یا آرگومانهای دستور به پایان برسند یا به آرگومان ';' برسد. به توضیحات بالا مراجعه کنید.
مانند --exec، این گزینه میتواند چندین بار استفاده شود، که در این صورت هر دستور به ترتیب دادهشده اجرا خواهد شد.
مثالها:
- یافتن تمام فایلهای test_*.py و باز کردن آنها در ویرایشگر دلخواه:
fd -g 'test_*.py' -X vim
توجه داشته
باشید که
این دستور
یک فرآیند
منفرد "vim" را
با تمام
نتایج
جستجو
بهعنوان
آرگومان
اجرا
میکند.
- یافتن تمام فایلهای *.rs و شمارش خطوط با "wc -l ...":
fd -e rs -X wc -l
- --batch-size size
- حداکثر تعداد آرگومانها برای ارسال به دستور دادهشده با -X. اگر تعداد نتایج بیشتر از اندازه دادهشده باشد، دستور دادهشده با -X دوباره با آرگومانهای باقیمانده اجرا میشود. اندازه دسته صفر به معنای عدم وجود محدودیت است (پیشفرض)، اما توجه داشته باشید که دستهبندی ممکن است همچنان به دلیل محدودیتهای سیستمعامل در حداکثر طول خطوط فرمان اتفاق بیفتد.
ساختار الگوها (PATTERN SYNTAX)
سینتکس عبارت باقاعده مورد استفاده توسط fd در اینجا مستند شده است:
سینتکس گلوب در اینجا مستند شده است:
محیط (ENVIRONMENT)
- LS_COLORS
- تعیین نحوه رنگیسازی نتایج جستجو، ببینید: dircolors(1).
- NO_COLOR
- غیرفعال کردن خروجی رنگی.
- XDG_CONFIG_HOME, HOME
- برای یافتن فایل نادیدهگیری سراسری استفاده میشود. اگر XDG_CONFIG_HOME تنظیم شده باشد، از $XDG_CONFIG_HOME/fd/ignore استفاده میشود. در غیر این صورت، از $HOME/.config/fd/ignore استفاده میشود.
فایلها (FILES)
- .fdignore
- این فایل شبیه به یک فایل .gitignore در هر کجای درخت جستجوشده عمل میکند و الگوهایی را مشخص میکند که باید از جستجو مستثنی شوند. با این حال، این فایل مختص fd است و حتی در صورت استفاده از گزینه --no-ignore-vcs نیز به کار خواهد رفت.
- $XDG_CONFIG_HOME/fd/ignore
- فایل نادیدهگیری سراسری. مگر اینکه حالت نادیدهگیری خاموش باشد (مانند --no-ignore)، ورودیهای نادیدهگیری در این فایل نادیده گرفته خواهند شد، گویی یک فایل .fdignore در دایرکتوری جاری است.
مثالها (EXAMPLES)
- یافتن فایلها و دایرکتوریهایی که با الگوی 'needle' مطابقت دارند:
- $ fd needle
- شروع جستجو در یک دایرکتوری مشخص (/var/log):
- $ fd nginx /var/log
- یافتن تمام فایلهای پایتون (تمام فایلهای با پسوند .py) در دایرکتوری جاری:
- $ fd -e py
- باز کردن تمام نتایج جستجو با vim:
- $ fd pattern -X vim
نکات و ترفندها (Tips and Tricks)
- •
- اگر ".git/" را به فایل نادیدهگیری سراسری خود ($XDG_CONFIG_HOME/fd/ignore) اضافه کنید، پوشههای ".git" بهطور پیشفرض نادیده گرفته میشوند، حتی زمانی که از گزینه --hidden استفاده شود.
- •
- میتوانید از نام مستعار شل (alias) یا یک اسکریپت واسط (wrapper) استفاده کنید تا فلگهای مورد نظر را بهطور پیشفرض به fd ارسال کنید. برای مثال، اگر رفتار پیشفرض رعایت gitignore را دوست ندارید، میتوانید از
`alias fd="/usr/bin/fd --no-ignore-vcs"`
در فایل bashrc. خود برای ایجاد یک نام مستعار برای fd استفاده کنید که بهطور پیشفرض فایلهای git را نادیده نمیگیرد.
گزارش باگها (BUGS)
مشکلات و باگها را میتوان در گیتهاب گزارش کرد: https://github.com/sharkdp/fd/issues