Q:

Can you put another match clause in a match arm? 

Can you put another match clause in one of the match results of a match like this in:
pub fn is_it_file(input_file: &str) -> String {
    let path3 = Path::new(input_file);  
    match path3.is_file() {
        true => "File!".to_string(),
        false => match path3.is_dir() {
                true => "Dir!".to_string(),
                _ => "Don't care",
        }
    }
}

If not why ? 

A:

Yes you can (see Qantas' answer).  But Rust often has prettier ways to do what you want.  You can do multiple matches at once by using tuples. 
pub fn is_it_file(input_file: &str) -> String {
    let path3 = Path::new(input_file);  
    match (path3.is_file(), path3.is_dir()) {
        (true, false) => "File!", 
        (false, true) => "Dir!", 
        _ => "Neither or Both... bug?", 
    }.to_string()
}

A:

Sure you can, match is an expression:
fn main() {
    fn foo() -> i8 {
        let a = true;
        let b = false;

        match a {
            true => match b {
                true => 1,
                false => 2
            },
            false => 3
        }
    }

    println!("{}",  foo()); // 2
}

You can view the results of this on the Rust playpen. 
The only thing that seems off about your code to me is the inconsistent usage of .to_string() in your code, the last match case doesn't have that.