mirror of
https://github.com/rust-lang-nursery/rust-cookbook
synced 2024-11-22 19:43:06 +00:00
Add dedup-filenames example
This commit is contained in:
parent
16627e0dbb
commit
e48c85104a
3 changed files with 46 additions and 0 deletions
|
@ -27,6 +27,7 @@ syslog = "3.2.0"
|
||||||
tar = "0.4.12"
|
tar = "0.4.12"
|
||||||
tempdir = "0.3.5"
|
tempdir = "0.3.5"
|
||||||
lazy_static = "0.2"
|
lazy_static = "0.2"
|
||||||
|
walkdir = "1.0.7"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
skeptic = "0.9"
|
skeptic = "0.9"
|
||||||
|
|
41
src/app.md
41
src/app.md
|
@ -10,6 +10,7 @@
|
||||||
| [Log to the Unix syslog][ex-log-syslog] | [![log-badge]][log] [![syslog-badge]][syslog] | [![cat-debugging-badge]][cat-debugging] |
|
| [Log to the Unix syslog][ex-log-syslog] | [![log-badge]][log] [![syslog-badge]][syslog] | [![cat-debugging-badge]][cat-debugging] |
|
||||||
| [Log messages to a custom location][ex-log-custom] | [![log-badge]][log] | [![cat-debugging-badge]][cat-debugging] |
|
| [Log messages to a custom location][ex-log-custom] | [![log-badge]][log] | [![cat-debugging-badge]][cat-debugging] |
|
||||||
| [Unzip a tarball to a temporary directory][ex-tar-temp] | [![flate2-badge]][flate2] [![tar-badge]][tar] [![tempdir-badge]][tempdir] | [![cat-filesystem-badge]][cat-filesystem] [![cat-compression-badge]][cat-compression] |
|
| [Unzip a tarball to a temporary directory][ex-tar-temp] | [![flate2-badge]][flate2] [![tar-badge]][tar] [![tempdir-badge]][tempdir] | [![cat-filesystem-badge]][cat-filesystem] [![cat-compression-badge]][cat-compression] |
|
||||||
|
| [Recursively find duplicate file names][ex-dedup-filenames] | [![walkdir-badge]][walkdir] | [![cat-filesystem-badge]][cat-filesystem] |
|
||||||
|
|
||||||
[ex-clap-basic]: #ex-clap-basic
|
[ex-clap-basic]: #ex-clap-basic
|
||||||
<a name="ex-clap-basic"></a>
|
<a name="ex-clap-basic"></a>
|
||||||
|
@ -345,6 +346,44 @@ fn run() -> Result<()> {
|
||||||
|
|
||||||
quick_main!(run);
|
quick_main!(run);
|
||||||
```
|
```
|
||||||
|
[ex-dedup-filenames]: #ex-dedup-filenames
|
||||||
|
<a name="ex-dedup-filenames"></a>
|
||||||
|
## Recursively find duplicate file names
|
||||||
|
|
||||||
|
Find recusively in the current directory duplicate filenames,
|
||||||
|
printing them only once.
|
||||||
|
|
||||||
|
[![walkdir-badge]][walkdir] [![cat-filesystem-badge]][cat-filesystem]
|
||||||
|
|
||||||
|
```rust,no_run
|
||||||
|
extern crate walkdir;
|
||||||
|
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
use walkdir::WalkDir;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
// Counters indexed by filenames
|
||||||
|
let mut filenames = HashMap::new();
|
||||||
|
|
||||||
|
// List recusively all files in the current directory filtering out
|
||||||
|
// diretories and files not accessible (permission denied)
|
||||||
|
for entry in WalkDir::new(".").into_iter()
|
||||||
|
.filter_map(Result::ok)
|
||||||
|
.filter(|e| !e.file_type().is_dir()) {
|
||||||
|
// Get entry's filename
|
||||||
|
let f_name = String::from(entry.file_name().to_string_lossy());
|
||||||
|
// Get or initialize the counter
|
||||||
|
let counter = filenames.entry(f_name.clone()).or_insert(0);
|
||||||
|
// Update the counter
|
||||||
|
*counter += 1;
|
||||||
|
|
||||||
|
if *counter == 2 {
|
||||||
|
println!("{}", f_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
<!-- Categories -->
|
<!-- Categories -->
|
||||||
|
|
||||||
|
@ -373,6 +412,8 @@ quick_main!(run);
|
||||||
[tar]: https://docs.rs/tar/
|
[tar]: https://docs.rs/tar/
|
||||||
[tempdir-badge]: https://img.shields.io/crates/v/tempdir.svg?label=tempdir
|
[tempdir-badge]: https://img.shields.io/crates/v/tempdir.svg?label=tempdir
|
||||||
[tempdir]: https://docs.rs/tempdir/
|
[tempdir]: https://docs.rs/tempdir/
|
||||||
|
[walkdir-badge]: https://img.shields.io/crates/v/walkdir.svg?label=walkdir
|
||||||
|
[walkdir]: https://docs.rs/walkdir/
|
||||||
|
|
||||||
<!-- Reference -->
|
<!-- Reference -->
|
||||||
|
|
||||||
|
|
|
@ -71,6 +71,7 @@ community. It needs and welcomes help. For details see
|
||||||
| [Log to the Unix syslog][ex-log-syslog] | [![log-badge]][log] [![syslog-badge]][syslog] | [![cat-debugging-badge]][cat-debugging] |
|
| [Log to the Unix syslog][ex-log-syslog] | [![log-badge]][log] [![syslog-badge]][syslog] | [![cat-debugging-badge]][cat-debugging] |
|
||||||
| [Log messages to a custom location][ex-log-custom] | [![log-badge]][log] | [![cat-debugging-badge]][cat-debugging] |
|
| [Log messages to a custom location][ex-log-custom] | [![log-badge]][log] | [![cat-debugging-badge]][cat-debugging] |
|
||||||
| [Unzip a tarball to a temporary directory][ex-tar-temp] | [![flate2-badge]][flate2] [![tar-badge]][tar] [![tempdir-badge]][tempdir] | [![cat-filesystem-badge]][cat-filesystem] [![cat-compression-badge]][cat-compression] |
|
| [Unzip a tarball to a temporary directory][ex-tar-temp] | [![flate2-badge]][flate2] [![tar-badge]][tar] [![tempdir-badge]][tempdir] | [![cat-filesystem-badge]][cat-filesystem] [![cat-compression-badge]][cat-compression] |
|
||||||
|
| [Recursively find duplicate file names][ex-dedup-filenames] | [![walkdir-badge]][walkdir] | [![cat-filesystem-badge]][cat-filesystem] |
|
||||||
|
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
@ -149,11 +150,14 @@ Keep lines sorted.
|
||||||
[url]: https://docs.rs/url/
|
[url]: https://docs.rs/url/
|
||||||
[regex]: https://docs.rs/regex/
|
[regex]: https://docs.rs/regex/
|
||||||
[regex-badge]: https://img.shields.io/crates/v/regex.svg?label=regex
|
[regex-badge]: https://img.shields.io/crates/v/regex.svg?label=regex
|
||||||
|
[walkdir-badge]: https://img.shields.io/crates/v/walkdir.svg?label=walkdir
|
||||||
|
[walkdir]: https://docs.rs/walkdir/
|
||||||
|
|
||||||
<!-- Examples -->
|
<!-- Examples -->
|
||||||
|
|
||||||
[ex-byteorder-le]: basics.html#ex-byteorder-le
|
[ex-byteorder-le]: basics.html#ex-byteorder-le
|
||||||
[ex-clap-basic]: app.html#ex-clap-basic
|
[ex-clap-basic]: app.html#ex-clap-basic
|
||||||
|
[ex-dedup-filenames]: app.html#ex-dedup-filenames
|
||||||
[ex-global-mut-state]: basics.html#ex-global-mut-state
|
[ex-global-mut-state]: basics.html#ex-global-mut-state
|
||||||
[ex-json-value]: encoding.html#ex-json-value
|
[ex-json-value]: encoding.html#ex-json-value
|
||||||
[ex-lazy-constant]: basics.html#ex-lazy-constant
|
[ex-lazy-constant]: basics.html#ex-lazy-constant
|
||||||
|
|
Loading…
Reference in a new issue