~jpastuszek/file-mode

Decode Unix file mode bits, change them and apply them to files
(cargo-release) start next development iteration 0.1.2
(cargo-release) version 0.1.2

clone

read-only
https://git.sr.ht/~jpastuszek/file-mode
read/write
git@git.sr.ht:~jpastuszek/file-mode

You can also use your local clone with git send-email.

Latest Version Documentation License

Decode Unix file mode bits, change them and apply them to files.

All file type, special and protection bits described in sys/stat.h are represented.

The Mode object can represent a file mode partially by the use of a bitmask. Only modified bits will be changed in the target file. Modifications specific only to directories (search) are handled correctly.

use std::path::Path;
use file_mode::{ModePath, User};

let mode = Path::new("LICENSE").mode().unwrap();

// query bits
assert!(mode.file_type().unwrap().is_regular_file());
assert!(mode.user_protection(User::Owner).is_read_set());
assert!(mode.user_protection(User::Group).is_write_set());
assert!(!mode.user_protection(User::Other).is_execute_set());

// print as string
println!("{}", mode); // -rw-rw-r--
assert_eq!(&mode.to_string(), "-rw-rw-r--");

// apply chmod string
Path::new("LICENSE").set_mode("u+r,g+u").unwrap();

See module level documentation on docs.rs for more examples.