sharkdp / fd

A simple, fast and user-friendly alternative to 'find'
Apache License 2.0
33.86k stars 809 forks source link

"File name too long" error? #1322

Open sharkdp opened 1 year ago

sharkdp commented 1 year ago

Discussed in https://github.com/sharkdp/fd/discussions/1320

Originally posted by **bczhc** May 22, 2023 I use this Ruby script to create a very large amount of recursive files and directories. ```ruby #!/bin/env ruby require 'fileutils' while true do name = (0...255).map { ('a'..'z').to_a[rand(26)] }.join puts name Dir.mkdir name Dir.chdir name File.open(name.reverse, 'w') { |x| x.write "hello" } end ``` After running it a short while (~ 1s), I use `fd` to list them and get the total file count. But the result of `fd` differs from `find`. ```console /mnt/hdd/depth ❯ find . | wc -l 1695 /mnt/hdd/depth ❯ fd | wc -l 31 ``` When I use `fd --show-errors`, it shows that a `File name too long` error is encountered: ```console /mnt/hdd/depth ❯ fd --show-errors | wc -l [fd error]: ./kawgfqncuntqfzdqljvxfoqkypvjrtqttchqpwbcpamyefsvmzjforxdswovhuezshwjqcbxcxgayvyquzsxspmkktbgibyhrqjbwchszciwftgmkjhewiydqyefkklnlgtwygnflhtdaqdiftebyagifnacmcgfzeuabdmlezshemmchtbfhpdrwiouzzjkzusqxdagoqvtboemhmnxabqiiptqnqhjjwllzdqrozlgmqejgsvionlgtpyawbp/ajtyfuguyprcrorzlfsdxqdejlrheytclpjnwgupyginwosrzipwimadppkxqojceyxbyyhwgoiyadeenjfvaifdgccwpsmuyrlafnewcprwcrqdwynnejvzrtzohogesfxzawygirbruxsjcjizkzywxjvphuheumtibynevvvuwegediejditxlqhvgypqrwimhummbxgafndiggwqqakqpcldgbgkqkkolflpoxnarsyoelgzmwtgjlmsjqy/rirsobrutbrlwjvytmtrqhtexiqvolmzojpejpvkpmewjvtbiqobnsabzpstdwifyswvauvqiwytpffowqudstejgbqzmkepaddpgqvodvfcggfnzkxlnjsvzkdzbeqdemuqsyrykiuumuzgxfcggspwfsacvnflsyvpwqhaidndclvycwefpcslpkzcjzybbgwkupovhavxcgzxvjimtsfvgroydufxzydmipuoxruwdxacvbqmyknmbesqvsh/gsbqyxxxpydtnzkczzqyeszjbnimifigojhurqcdzbivbnxahccfmmwecenjrbcznxxqelvnavvqkzhwxwhwwrogzyisxqlzmzcrugbpyunbjswkmcnvswjsvbawtqrfdbvqkyakjqjjxpwyolwotggmgxwdvgergzwcibhxxnldhzdkikccdsnmxsnsullockijctqbmftdbcoypnxkblyldqjivzaeamcvitnzatqcqgnitrpdayhzeuaxlzn/zzupfcvmnajmroccfkmhwzivjucmwquruqxrnuofgirlypbqlgzporzxljezvqvppwpspiuxgoudxkkwbdvzlctytqjmaraieokutczhgajzytcoydciibquszkuyzsyxcoynkjhuaikozomtfjdtnfnabkmhntnrkspqieteuosidanstfpxldhnfbauivnourqnxlvtfjvcneyihtybcwsienexnrdbzigimhkvbiutquhguhonqvazepkswj/iqkafkjpfdlqqtggvwseofayaevsymmvkezlgwgmqfmyvjzauebifcpqlcyzkihotiabjxjvyojwhpaubnshylwwucjkjasqbafinpmxxfwtxyqxhmgfdzthltjptnlkrnwheczxqwywvksguilqkmrrdnjcapcyasecqhkzuppbqrezyrykrasoyhvsdkziuwwydiuppwqkownmwcuvievzpjiydlosjhdzdorrrtymsdvyyqrslavqxjyuhfr/tdpiephvrvbogpnfpzxtfvtmiovfcxfxywxfjstghrkzticietuegzdgacspyhoxciqvfmkwxeoljnbbyohqruetpcbpxsygivgwawtevqxvhepgzqzyugwjyvdghuavfvujncfjulkwwypubdtxchztknvvhcjghnfsdmkzlfdhjyjugoadncvqcizakedvhuvexusbnevsvqsryftlceohgzyebkirdytofrbprbtulbevucalmfegozbmthi/fjezuqiswicvencfxttgzlbgoncwjifmnfaenmthchivncysgdgofenoswokxucxwzlugsljurkkniyndwuvoehgiwlxyvjzoeleyxdmszwmkrhrlwcqibnuxjjhjkjgheeoljcmvrmfdascswmcavqmanupvbhuaspodpnxbxjkklfoduxtxujdjvcmwgfbspcxolfshdciatmlalalcohqfldzslakwqyowtmqdqevxazkmqrbdxlhkmnjghe/qdwrxuerhwigvutuwquzlxlurglnwmwklbmsrmbrzibhljfcdiwndbpjsrkdbogobpkmhkxelvfjmyfigvcfykinpzzslfqpzztfnmhoutxtyyxlhppqpvzubqjejhjilvrernvtslvzzdmxyiilyixtaeiibjkbnmvbvgnjcgmuohwcolnvqtflpbcnxcnompllrroqwqofrvyzppfsxhjlgvxdqqpegkpyptjwoqfrghppxoedzqvuntwjfqi/ncatwvvzelbzxfkojoammsddzxlogfcrawbmbhwousxgmsuqjdwwheevlgcqyljlmylotbhdqwntxxjvrbwhakawnbntvylvhjaaepxugrpxastuxgklmjivyogdjytphruztgepnogiarksahzzivxqchcnkdqhiwyevstpoxbdhtcmztfhazyzktxcvrxstwqovhsdfwgognkuoqyamusouikmcamhcmqxatgyfcqaehehirorkajxqrouttz/yweuepezifiiedmcgujqjeygluiieyzgasexjqkhadnmvqxazrrbwozxvxjljnfivgrnjkprxnhkmnkveycdthqvypojmmziecnqxlsyykbjebrkcccungnlybwypzqermcqfsawqmofvzjbsiirfqmbjxjpvaayxmrybkdujjvkwuhmdssmwtckfstlmbwrwnfdymkimcniebpjowjwuoqrcncrmsqnyqtiemdkfggjxglhxphwaoaxglfcmcx/lzlcrvunvufxgrycthoeslrhytgaqpujzaslogajrszqxawllwanyoegisxxpdapgslilnukihyzdqenaufdunxbbljmwzhbaxzrzhdvjcgpvldstheojkkslsshspmcuzkbphjphvhktbvgjodytaihhsnqfcmrifxzbmgqhdfznyhduhlazoxmyzvkuoxetohhvuaxpmgohkaiteoijbtxloxrahbfbtooiygjfrszqazrvbehgpkgzzfojdu/mojtvtoawmkoujzndlgmzcpmoostbkyiajcegsjsjiqpvzpcftucfdvcytdxbykpwdivqwxbhksyuytdfnsdhfuyeeoslwkrhemcfdkuidbsqzpwdcmdfopkrthvrtbjofgjykbmglksvmfuihryzmojonhuqteeaphlscqvpojmgksdgxyzdwpigbxjjwyyptvxjpkgdluejwjxbisbdgdtjjqrdxpblrvadpbwulzyebsrtleimtnufbpuldh/ftfxoepdmgnlqsyhmwzdzolaqrbchuwoydtifsetdenumnymwjkzzbpblsbaslraxxpvzhvuapmqfsiwaahtosrtdappyntcdatxqlmdkrvyhryyfziducfmswckxutlnttdnptndtfatvwcgptlyzcnmwepjnrysuuqtbwvjrvhroscgcekkoxuddgvixowuynxtpjxrfnnzsbfudnimivuwpyaasrqyqrtkkoxiwgycicibdtbczlefuwmdxo/evcnynixtsfpaljzaudixjuictftuhhxpplnilqhijuchzmazykfgroxcurymjxlbpdjdunmmeprovvqucoogoalivjwcbikeyewaidxulgtgyxtxcpmgmggtljfmnaebwiticiqqjioivjpxmuvhgiatepvzhcohgkihfnnnmfithjsvcxyzhahbjlptrykvhfmquxkeqiqlyfrmbowltlofmanwjsmkfgdzxgrbiieohcfrmrkgudgwkhrlrn/ekvnmvzkjehtbzjseeuqaovmrksetnzuzxqlfefhnwuzlmxuvxbhljoabsusmvgvfglvfsyoezllmxcnmfujakdkhrpbdhazkrtkzoplxdomystmyqrfecisctsvlujhluiapregammyzaaancxvadsfxvkxnwwtmluhywepqbslicdgxjwhkfcbwrpttgwumqrjerifarjnrxfvqizupviqlqilkojrmzolycmpdewslksqhzoedciflpdraim: File name too long (os error 36) 31 ``` How can I get rid of this? Looks like when I attempt to **open** a file with long path name, it has "File name too long" error; but I just want to simply **list** them.
tavianator commented 1 year ago

Looks like when I attempt to open a file with long path name, it has "File name too long" error; but I just want to simply list them.

True, but listing files requires opening directories, and fd doesn't use openat() to avoid PATH_MAX issues. This is one of the things my new file system walker will solve :)