diff --git a/src/pxar/encoder.rs b/src/pxar/encoder.rs index 15fff411..bffd6b22 100644 --- a/src/pxar/encoder.rs +++ b/src/pxar/encoder.rs @@ -700,6 +700,13 @@ impl<'a, W: Write, C: BackupCatalogWriter> Encoder<'a, W, C> { }; if include_children { + // Exclude patterns passed via the CLI are stored as '.pxarexclude-cli' + // in the root directory of the archive. + if is_root && match_pattern.len() > 0 { + let filename = CString::new(".pxarexclude-cli")?; + name_list.push((filename, dir_stat.clone(), match_pattern.clone())); + } + for entry in dir.iter() { let entry = entry .map_err(|err| format_err!("readir {:?} failed - {}", self.full_path(), err))?; @@ -750,20 +757,6 @@ impl<'a, W: Write, C: BackupCatalogWriter> Encoder<'a, W, C> { ); } } - - // Exclude patterns passed via the CLI are stored as '.pxarexclude-cli' - // in the root directory of the archive. - if is_root && match_pattern.len() > 0 { - let filename = CString::new(".pxarexclude-cli")?; - name_list.push((filename, dir_stat.clone(), match_pattern.clone())); - if name_list.len() > MAX_DIRECTORY_ENTRIES { - bail!( - "too many directory items in {:?} (> {})", - self.full_path(), - MAX_DIRECTORY_ENTRIES - ); - } - } } else { eprintln!("skip mount point: {:?}", self.full_path()); }