Czy istnieje funkcja w Perlu, która wyświetla wszystkie pliki i katalogi w katalogu? Pamiętam, że Java ma File.list()
to zrobić? Czy w Perlu istnieje porównywalna metoda?Jak mogę wyświetlić listę wszystkich plików w katalogu z Perl?
Odpowiedz
Jeśli chcesz uzyskać zawartości danego katalogu, a tylko ona (tj żadnych podkatalogów), najlepszym sposobem jest użycie opendir/readdir/closedir:
opendir my $dir, "/some/path" or die "Cannot open directory: $!";
my @files = readdir $dir;
closedir $dir;
Można również użyć:
my @files = glob($dir . '/*');
Ale moim zdaniem to nie jest tak dobry - głównie dlatego, że glob jest dość skomplikowana sprawa (można filtrować wyniki automatycznie) i używając go, aby wszystkie elementy katalogu wydaje się zbyt proste zadanie.
Z drugiej strony, jeśli chcesz poznać zawartość od wszystkich katalogów i podkatalogów, nie ma w zasadzie jeden roztwór standardowy:
use File::Find;
my @content;
find(\&wanted, '/some/path');
do_something_with(@content);
exit;
sub wanted {
push @content, $File::Find::name;
return;
}
to powinno zrobić.
my $dir = "bla/bla/upload";
opendir DIR,$dir;
my @dir = readdir(DIR);
close DIR;
foreach(@dir){
if (-f $dir . "/" . $_){
print $_," : file\n";
}elsif(-d $dir . "/" . $_){
print $_," : folder\n";
}else{
print $_," : other\n";
}
}
Należy sprawdzić opendir niepowodzenia (opendir ... or die „Komunikat o błędzie : $! "). Poza tym czegoś brakuje? Co robi tutaj Win32 :: GUI :: DoEvents()? (Nie widzę niczego istotnego w pytaniu.) – Telemachus
jest to najlepszy sposób, w jaki nie chcę lub nie chcę pamiętać regularnych wyrażeń na coś, co powinno być łatwe do zrobienia, użyję tego, aby utworzyć funkcję taką jak lista ($ dir ,"fa"); dla plików "d" dla katalogu, dziękuję za opublikowanie tego – Geomorillo
readdir() robi to.
Sprawdź http://perldoc.perl.org/functions/readdir.html
opendir(DIR, $some_dir) || die "can't opendir $some_dir: $!";
@dots = grep { /^\./ && -f "$some_dir/$_" } readdir(DIR);
closedir DIR;
Albo File::Find
use File::Find;
finddepth(\&wanted, '/some/path/to/dir');
sub wanted { print };
Będzie przechodzić przez podkatalogi, jeśli takie istnieją.
To będzie lista Wszystko (w tym katalogi sub) z katalogu określić, w kolejności i z atrybutami. Spędziłem wiele dni, szukając czegoś, co można by zrobić, a ja brałem udział w całej tej dyskusji i trochę mojej, i składałem razem. CIESZYĆ SIĘ!!
#!/usr/bin/perl --
print qq~Content-type: text/html\n\n~;
print qq~<font face="arial" size="2">~;
use File::Find;
# find(\&wanted_tom, '/home/thomas/public_html'); # if you want just one website, uncomment this, and comment out the next line
find(\&wanted_tom, '/home');
exit;
sub wanted_tom {
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat ($_);
$mode = (stat($_))[2];
$mode = substr(sprintf("%03lo", $mode), -3);
if (-d $File::Find::name) {
print "<br><b>--DIR $File::Find::name --ATTR:$mode</b><br>";
} else {
print "$File::Find::name --ATTR:$mode<br>";
}
return;
}
Arghh, moje oczy! – javs
Jeżeli jesteś próżniak jak ja może chcesz użyć modułu File::Slurp. Funkcja read_dir wola czyta zawartość katalogu do tablicy, usuwa punkty, a jeśli potrzebna prefiks pliki wrócił z katalogu dla bezwzględnych ścieżek
my @paths = read_dir('/path/to/dir', prefix => 1) ;
- 1. Jak wyświetlić listę plików w katalogu statycznym?
- 2. Jak wyświetlić listę plików w katalogu android?
- 3. Jak uzyskać listę wszystkich plików z rozszerzeniem ESY w katalogu?
- 4. PHP: Jak wyświetlić listę plików w katalogu aukcji bez podkatalogów
- 5. Jak wyświetlić listę plików w katalogu za pomocą bash?
- 6. Jak wyświetlić listę wszystkich rozszerzeń plików binarnych w drzewie katalogów?
- 7. Jak wyświetlić listę wersji plików w git?
- 8. Jak mogę wyświetlić listę plików w CVS bez wstępnego zamówienia?
- 9. Jak wyświetlić listę wszystkich plików w katalogu/podkatalogu bez nazwy ścieżki CMD?
- 10. Jak mogę wyświetlić listę wszystkich modułów w repozytorium CVS?
- 11. Jak mogę wyświetlić listę wszystkich wyzwalaczy bazy danych w sqlite?
- 12. Uzyskaj listę wszystkich plików wewnątrz katalogu w vb.net
- 13. Jak wyświetlić listę wszystkich pakietów w Nuget
- 14. Jak mogę uzyskać listę wszystkich plików o określonym rozszerzeniu z określonego katalogu?
- 15. Jak mogę wyświetlić listę wszystkich wątków uruchomionych przez setTimeout/setInterval
- 16. Jak mogę wyświetlić listę wszystkich przydziałów otrzymanych przez użytkownika?
- 17. Lista wszystkich plików w jednym katalogu PHP
- 18. Jak wyświetlić listę wszystkich zmiennych klasy
- 19. Jak wyświetlić listę wszystkich plików w folderze S3 za pomocą mgły w Ruby
- 20. Jak wyświetlić listę wszystkich klas zgodnych z protokołem w Swift?
- 21. Jak mogę utworzyć listę plików w bieżącym katalogu i jego podkatalogach z określonym rozszerzeniem?
- 22. Jak wyświetlić listę plików w pliku zip w grze powershell?
- 23. Skopiuj listę plików do katalogu
- 24. Jak wyświetlić listę plików wewnątrz koła python?
- 25. Lista wszystkich plików z internetowego katalogu FTP do listy C#
- 26. Jak wyświetlić listę wszystkich zmiennych środowiskowych w C/C++ aplikacji
- 27. Jak wyświetlić listę wszystkich funkcji w module Pythona?
- 28. Jak wyświetlić listę wszystkich modeli, łącznie z problemem?
- 29. Jak wyświetlić listę wszystkich atrybutów obiektu w python pdb?
- 30. QMake: Automatyczne kompilowanie wszystkich plików w katalogu
Zawsze zapominam, że readdir po prostu zwraca listę względnych nazw plików, a nie całą ścieżkę! –
Dziękujemy za zniechęcanie do korzystania z funkcji globowania w tym zadaniu. Kolejną wadą korzystania z globowania jest to, że nie znajdzie ukrytych plików (zaczynających się kropką). – josch