ls: add more informative listing with -l (WIP)
This commit is contained in:
parent
6036135bab
commit
06f1268506
|
@ -0,0 +1,5 @@
|
||||||
|
PREFIX ?= ~/.local/bin/grutils
|
||||||
|
file_list != find . -name '*.rs'
|
||||||
|
|
||||||
|
all:
|
||||||
|
rust
|
46
src/ls.rs
46
src/ls.rs
|
@ -1,11 +1,20 @@
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
|
use std::io::{stdout, Write};
|
||||||
|
use std::path::Path;
|
||||||
|
use std::os::unix::fs::PermissionsExt;
|
||||||
|
|
||||||
|
/*extern crate chrono;
|
||||||
|
use chrono::prelude::*;*/
|
||||||
|
|
||||||
fn main(){
|
fn main(){
|
||||||
let args: Vec<String> = env::args().collect();
|
let args: Vec<String> = env::args().collect();
|
||||||
let pwd = env::current_dir().unwrap();
|
// Flags vars
|
||||||
let mut show_hidden = false;
|
let mut show_hidden = false;
|
||||||
let mut show_prev_and_current = false;
|
let mut show_prev_and_current = false;
|
||||||
|
let mut long_listing = false;
|
||||||
|
// Directories
|
||||||
|
let pwd = env::current_dir().unwrap();
|
||||||
let mut dir = pwd.to_str();
|
let mut dir = pwd.to_str();
|
||||||
for arg in 1..args.len() {
|
for arg in 1..args.len() {
|
||||||
match args[arg].as_str() {
|
match args[arg].as_str() {
|
||||||
|
@ -19,15 +28,18 @@ fn main(){
|
||||||
"-A" | "--almost-all" => {
|
"-A" | "--almost-all" => {
|
||||||
show_hidden = true;
|
show_hidden = true;
|
||||||
show_prev_and_current = false;
|
show_prev_and_current = false;
|
||||||
}
|
},
|
||||||
|
"-l" => {
|
||||||
|
long_listing = true;
|
||||||
|
},
|
||||||
arg => {
|
arg => {
|
||||||
dir = Some(arg);
|
dir = Some(arg);
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
list_dir(dir.unwrap().to_string(), show_hidden, show_prev_and_current);
|
list_dir(dir.unwrap().to_string(), show_hidden, show_prev_and_current, long_listing);
|
||||||
}
|
}
|
||||||
fn list_dir(arg: String, show_hidden: bool, show_prev_and_current: bool) {
|
fn list_dir(arg: String, show_hidden: bool, show_prev_and_current: bool, long_listing: bool) {
|
||||||
let files = fs::read_dir(arg.clone()).unwrap();
|
let files = fs::read_dir(arg.clone()).unwrap();
|
||||||
if show_hidden && show_prev_and_current {
|
if show_hidden && show_prev_and_current {
|
||||||
println!(".");
|
println!(".");
|
||||||
|
@ -39,6 +51,30 @@ fn list_dir(arg: String, show_hidden: bool, show_prev_and_current: bool) {
|
||||||
if file.clone().unwrap().display().to_string().starts_with('.') && !show_hidden {
|
if file.clone().unwrap().display().to_string().starts_with('.') && !show_hidden {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
println!("{}", file.unwrap().display());
|
if long_listing {
|
||||||
|
long_listing_format(Path::new(&path), file.unwrap().display().to_string());
|
||||||
|
} else {
|
||||||
|
print!("{} ", file.unwrap().display());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if !long_listing {
|
||||||
|
print!("\n");
|
||||||
|
}
|
||||||
|
stdout().flush().unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn long_listing_format(path: &Path, file: String) -> std::io::Result<()> {
|
||||||
|
let metadata = fs::metadata(path)?;
|
||||||
|
let modified = metadata.modified();
|
||||||
|
/*let timestamp = modified.parse::<i64>().unwrap();
|
||||||
|
let naive = NaiveDateTime::fromtimestamp(timestamp, 0);
|
||||||
|
let datetime: DateTime<Utc> = DateTime::from_utc(naive, Utc);*/
|
||||||
|
let mut permissions_string = String::new();
|
||||||
|
if metadata.is_dir() {
|
||||||
|
permissions_string.push('d');
|
||||||
|
} else {
|
||||||
|
permissions_string.push('-');
|
||||||
|
}
|
||||||
|
println!("{}{:o} {} {}", permissions_string, metadata.permissions().mode(), metadata.len(), file);
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue