You are not logged in.
Hello,
My belief is that all file managers suck. There are no exceptions to this. So, for the past few months, I've been sourcing a file with a bunch of tricks I've invented / found through browsing the web to make using just bash as a file manager much more convenient.
Here's what I currently use:
# fm v1.9.1 by Kiah Morante
# A very simple file manager.
# Depends on pycp/pymv, http://github.com/yannicklm/pycp and feh
# 'source' this file in a BASH shell
showHidden=0 # Hidden files not shown
showDetails=0 # ls is replaced with ls -lh if showDetails is 1
shopt -s autocd # cd to a dir just by typing its name
PROMPT_COMMAND='[[ ${__new_wd:=$PWD} != $PWD ]] && list; __new_wd=$PWD' # ls after cding
# Shortcuts
source ~/.config/fm/shortcuts # Call all custom shortcuts
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias h='cd ~'
alias n='cd "$n"'
# Keybindings
bind '"\C-l":"list\C-m"'
bind '"\C-h":"hide\C-m"'
bind '"\C-o":"details\C-m"'
bind '"\C-f":"makedir\C-m"'
bind '"\C-n":"n\C-m"'
bind '"\C-y":"cpwd\C-m"'
bind '"\C-p":"cd "$OLDPWD"\C-m"' # Hint: You could also type '~-'
# FM prompt appearance
if [[ $(whoami) == 'root' ]]; then
# So that the user knows if they have root privileges:
PS1="\[\e[0;32\]mf\[m\e[m\] \[\e[0;31m\]root\[\e[m\] \[\e[0;34m\]\w \[\e[m\]\[\e[0;31m\]> \[\e[m\]"
else
PS1="\[\e[0;32\]mf\[m\e[m\] \[\e[0;34m\]\w \[\e[m\]\[\e[0;31m\]> \[\e[m\]"
fi
# Functions
# Usage
fmhelp () {
echo "hide - toggle hidden (hidden by default)
ls - lists contents of dir(s) passed in args.
lsd - list directories
cd - changed to directory \$1
cp \$@ \$2 - copies file from \$1 to \$2
mv \$@ \$2 - moves file from \$1 to \$2
rm \$@ - deletes \$@
sc \$1 \$2 - make a shortcut called \$1 pointing to \$2. If no \$2 is passed, it is evaluated as \$PWD
cpwd - copy current working directory
.., ..., .... - cd .. etc.
o \$1 - opens \$1 with xdg-open
hm - how many files are in the current directory
details - show file details (ls -lh)
fmhelp - this help menu
n - Intelligent guess of the next dir you wish to cd to. Last $1 in open, list, or makedir; last argument in copy or move; pwd before a cd
~- - BASH shortcut for \$OLDPWD
img - feh frontend with the following usage:
img -t \$2 - views the dirs/images specified in \$2..\$n as clickable thumbnails
img -s \$2 \$3 - views the images specified in \$3..\$n as a slideshow with a slide change speed of \$2 seconds
img \$@ - views the dirs/images specified
Shortkeys:
Ctrl-f - mkdir
Ctrl-h - hide
Ctrl-l - ls
Ctrl-n - cd \$n
Ctrl-o - details
Ctrl-p - cd \$OLDPWD
Ctrl-y - cpwd
Ctrl-u - clear line # urxvt default"
}
# Toggle display hidden files
# If $showHidden is 1, hidden files are shown
hide () {
showHidden=$(( 1 - $showHidden ))
list
}
# Toggle display file details
# If $showDetails is 1, file details are shown
details () {
showDetails=$(( 1 - $showDetails ))
list
}
# ls
listToggle () {
if [[ $showHidden == 1 && $showDetails == 1 ]]; then
ls -C --color -A -lh "$dir"
elif [[ $showHidden == 1 && $showDetails == 0 ]]; then
ls -C --color -A "$dir"
elif [[ $showHidden == 0 && $showDetails == 1 ]]; then
ls -C --color -lh "$dir"
else
ls -C --color "$dir"
fi
}
list () {
clear # Unclutter the screen
# List pwd if no $1
if [[ $@ == "" ]]; then
set '.'
fi
# List multiple folders:
for dir in "$@"
do
listToggle
done
n="$1" # See 'n' in fmhelp
}
# use feh to view thumbnails/images/slideshow
img () {
case "$1" in
-t) nohup feh --thumbnails "${@:2}" --thumb-height 120 --thumb-width 120 -S filename -d --cache-thumbnails -B black > /dev/null 2>&1 & ;;
-s) nohup feh "${@:3}" -S filename -d -B black --slideshow-delay "$2" > /dev/null 2>&1 & ;;
*) nohup feh "$@" -S filename -d -B black > /dev/null 2>&1 & ;;
esac
list
}
# cp
copy () {
if [[ $showHidden == 1 ]]; then
pycp --interactive --all "$@"
else
pycp --interactive "$@"
fi
list
n="${@:(-1)}" # n is the last argument (where stuff is moved to)
}
# mv
move () {
if [[ $showHidden == 1 ]]; then
pymv --interactive --all "$@"
else
pymv --interactive "$@"
fi
list
n="${@:(-1)}"
}
makedir () {
if [[ $1 == "" ]]; then
read -e n
set "$n"
fi
if mkdir -- "$1"; then
list # Update pwd to show new dir(s) that have been made.
n="$1"
fi
}
# rm
remove () {
rm -rfI "$@"
list
}
# open files
o () {
# To use xdg-open
#nohup xdg-open "$1" > /dev/null 2>&1 &
if [ -f "$1" ] ; then
case "$1" in
*.tar.bz2) tar xjf "$1" ;;
*.tar.gz) tar xzf "$1" ;;
*.bz2) bunzip2 "$1" ;;
*.rar) rar x "$1" ;;
*.gz) gunzip "$1" ;;
*.tar) tar xf "$1" ;;
*.tbz2) tar xjf "$1" ;;
*.tgz) tar xzf "$1" ;;
*.zip) unzip "$1" ;;
*.Z) uncompress "$1" ;;
*.7z) 7z x "$1" ;;
*.pdf) nohup zathura "$1" > /dev/null 2>&1 & ;;
*.html) nohup luakit "$1" > /dev/null 2>&1 & ;;
*.blend) nohup blender "$1" > /dev/null 2>&1 & ;;
*.avi) nohup mplayer "$1" ;;
*.wmv) nohup mplayer "$1" ;;
*.rmvb) nohup mplayer "$1" ;;
*.mp3) nohup urxvtc -si -sw -sh 30 -e mplayer "$1" > /dev/null 2>&1 & ;;
*.flv) nohup mplayer "$1" ;;
*.mp4) nohup mplayer "$1" ;;
*.ogg) nohup urxvt -si -sw -sh 30 -e mplayer "$1" > /dev/null 2>&1 & ;;
*.wav) nohup audacity "$1" > /dev/null 2>&1 & ;;
*.jpg) img "$1" ;;
*.jpeg) img "$1" ;;
*.JPG) img "$1" ;;
*.png) img "$1" ;;
*.gif) nohup gpicview "$1" > /dev/null 2>&1 & ;;
*) nohup urxvt -si -sw -sh 30 -e vim "$1" > /dev/null 2>&1 & ;;
esac
else
echo "'$1' is not a valid file"
fi
n="$1"
}
# Add shortcuts
makeShortcut () {
if [[ $2 == "" ]]; then
set $1 .
fi
echo ""$1"=\""$2"\"
alias "$1"='cd \""$2"\"'
" >> ~/.config/fm/shortcuts
source ~/.config/fm/shortcuts
}
# Copy pwd to clipboard
cpwd () {
echo \"$(pwd)\" | xclip
}
# List directories
lsd () {
ls -F "$@" | grep \/$
}
# Command aliases
alias mv="move"
alias sc="makeShortcut"
alias cp="copy"
alias ls="list"
alias rm="remove"
alias mkdir="makedir"
alias hm="ls -l . | egrep -c '^-'"
list # ls when fm starts
Could all of you fellow file manager-haters post your little tricks, whether just a few lines added to ~/.bashrc or fully fledged files that you source like mine?
Last edited by greenmanwitch (2011-02-07 19:58:40)
Offline
I haven't created any special commands/bash scripts although I do have a few aliases to make life easier.
I just use the default commands for most everything.
There's no such thing as a stupid question, but there sure are a lot of inquisitive idiots !
Offline
shopt -s autocd # cd to a dir just by typing its name
PROMPT_COMMAND='[[ ${__new_wd:=$PWD} != $PWD ]] && list; __new_wd=$PWD'
This one is definitely my favourite.
EDIT: Someone made me realise that my old way of doing this was pretty broken and dodgy. This is a much better fix.
Last edited by greenmanwitch (2010-11-17 12:23:23)
Offline
shopt -s autocd # cd to a dir just by typing its name PROMPT_COMMAND='if [[ $PWD != $OLDPWD ]]; then list; fi' # ls after cd to a new dir
This one is definitely my favourite.
That is pretty nice. I don't suppose there's a way to make it work with any subfolder of any directory in CDPATH?
Up till now, I've just been using a function to have cd do its normal thing and then call ls -F:
function cd {
builtin cd "$@" && ls -F
}
Offline
Check out viewglob, it is an interesting idea to extend command line filemanagement.
you can find a pkgbuild in AUR.
Offline
`cd -` is the same as `cd "$OLDPWD"`.
I extract my zip and rar files to a new directory:
x() {
case $1 in
*.rar)
dir="${1%.rar}"
mkdir "$dir"
unrar e "$1" "$dir" >/dev/null
;;
*.zip)
dir="${1%.zip}"
mkdir "$dir"
unzip "$1" -d "$dir"
;;
*) bsdtar -xf $1;;
esac
}
Offline
Hello,
My belief is that all file managers suck. There are no exceptions to this. So, for the past few months, I've been sourcing a file with a bunch of tricks I've invented / found through browsing the web to make using just bash as a file manager much more convenient.
If all file managers suck, then by definition this one sucks as well...
Offline
If all file managers suck, then by definition this one sucks as well...
Eh Dont be a troll. Bash is a shell, which can be used as a file manager. He stated that the programs that call themselves file-managers suck.
Offline
I long ago got into the habit of cd.
cat .config/fish/fish_history | grep -v '^#' | awk '{print $1}' | sort | uniq -c | sort -rn | head -3
15203 ls
9949 cd
8629 exit
aur S & M :: forum rules :: Community Ethos
Resources for Women, POC, LGBT*, and allies
Offline
I long ago got into the habit of cd.
cat .config/fish/fish_history | grep -v '^#' | awk '{print $1}' | sort | uniq -c | sort -rn | head -3 15203 ls 9949 cd 8629 exit
exit? Really? You know you can just type ctrl-d, right?
Offline
I got into the habit of typing exit.
aur S & M :: forum rules :: Community Ethos
Resources for Women, POC, LGBT*, and allies
Offline
I never saw the point in using a 'file manager'. Using the command line for that kind of stuff is half the fun of using Linux imo. Plus I've found that by using command line file management, my directory tree ends up being far better organized than it ever was using graphical file management. It doesn't take long to learn all the tricks and make cli file management much faster and easier than with a graphical file manager.
I mostly just use the default commands for everything, and then have a small library of scripts for most things. the best tip I can suggest is try 'shopt -s extglob'
here's a little tidbit about extglob and how cool it is http://aplawrence.com/Words2005/2005_05_25.html
Hofstadter's Law:
It always takes longer than you expect, even when you take into account Hofstadter's Law.
Offline
# Depends on pycp/pymv, http://github.com/yannicklm/pycp
Hey, that's me
(pycp-git is in AUR too)
Just a word of warning: pycp may break quite often.
Don't hesitate to provide feedback here:
https://bbs.archlinux.org/viewtopic.php?id=65331
Offline
I use all of these extra bash features
# bash options
shopt -s cdspell # autocorrects cd misspellings
shopt -s checkwinsize # update the value of LINES and COLUMNS after each command if altered
shopt -s cmdhist # save multi-line commands in history as single line
shopt -s dotglob # include dotfiles in pathname expansion
shopt -s expand_aliases # expand aliases
shopt -s extglob # enable extended pattern-matching features
shopt -s nocaseglob # pathname expansion will be treated as case-insensitive
shopt -s histappend # Append History instead of overwriting file.
shopt -s no_empty_cmd_completion # No empty completion
Some more than the others of course. extglob, expand_aliases and dotglob are the most used for me.
There's no such thing as a stupid question, but there sure are a lot of inquisitive idiots !
Offline
Aliasing h to cd ~ may be a little overkill, as just 'cd' does the same as 'cd ~', so you're just saving one character.
Offline
Aliasing h to cd ~ may be a little overkill, as just 'cd' does the same as 'cd ~', so you're just saving one character.
Hah! Never knew about using just "cd" to get in the home dir! Nice tip!
Offline
hatten wrote:Aliasing h to cd ~ may be a little overkill, as just 'cd' does the same as 'cd ~', so you're just saving one character.
Hah! Never knew about using just "cd" to get in the home dir! Nice tip!
Maybe a bit OT, but you can also use 'cd -' to go into the previous directory you were in.
$ cd /var/tmp
$ cd /media/cd
$ cd -
(And you're back in /var/tmp)
Offline
Just out of curiosity, what don't you guys like about file managers?
I like Arch
Offline
Just out of curiosity, what don't you guys like about file managers?
For me, it's mostly that I can type faster than I can click and drag. I find moving files around in a file manager tedious and slow.
once you are used to using the command line for everything you realize that it's actually quite a bit faster than pushing your mouse around for everything. especially once you get into scripting common tasks.
Hofstadter's Law:
It always takes longer than you expect, even when you take into account Hofstadter's Law.
Offline
Try Ranger. Cli file manager.
Offline
I would actually state that using bash as your filemanager is good for a 'few' files, but once you have video files cluttered all throughout your hard drive and folders all over, thats where the 'bash' filemanager system lacks its use in terms of effectiveness.
I must state that however I say that, I use a bash terminal to sometimes go through folders myself and it does feel a bit natural. Just being the devils advocate.
some bits from my .bashrc
alias ll="ls -lh"
alias la="ls -a"
alias exit="clear; exit"
alias ls="ls --color=auto"
I like the use of aliases.
“There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies. And the other way is to make it so complicated that there are no obvious deficiencies.”-- C.A.R. Hoare
Offline
I would actually state that using bash as your filemanager is good for a 'few' files, but once you have video files cluttered all throughout your hard drive and folders all over, thats where the 'bash' filemanager system lacks its use in terms of effectiveness.
You are correct for multimedia files but for text (even rich text) the command line tools are unparalleled; recall find and grep. The shell one chooses also matters. Bash is great but zsh has superior globbing features. Personally I use fish which alows me to jump to directories much faster than any file manager, even Ranger.
aur S & M :: forum rules :: Community Ethos
Resources for Women, POC, LGBT*, and allies
Offline
I would actually state that using bash as your filemanager is good for a 'few' files, but once you have video files cluttered all throughout your hard drive and folders all over, thats where the 'bash' filemanager system lacks its use in terms of effectiveness.
Wow, precisely what moved me away from using graphical filemanagers is how unresponsive they became when there were a large number of multimedia files in a given folder (--every try to open a folder in nautilus with 1000+ images?), and how long they take to search the entire filesystem for certain kinds of files when they were spread around (as compared to locate/find in a terminal).
Offline
once you have video files cluttered all throughout your hard drive and folders all over, thats where the 'bash' filemanager system lacks its use in terms of effectiveness.
Actually, I found this to be one of the best advantages of using bash is that it forces a user to think about file organization and making useful naming schemes for files.
For example, instead of having 1000+ media files in one directory I subcategorize theme by genre or whatever, and then probably subcategorize them again.
Then I usually rename the files to something meaningful, like if I have 50 pictures of my kids birthday, just do a for each loop on the directory and rename all the files donovan_birthdayX.jpg where X is an integer incrementation.
essentially. just don't "have files cluttered all throughout you hard drive and folders all over". and your life will be much happier regardless of how you manage your files.
Hofstadter's Law:
It always takes longer than you expect, even when you take into account Hofstadter's Law.
Offline
I would actually state that using bash as your filemanager is good for a 'few' files, but once you have video files cluttered all throughout your hard drive and folders all over, thats where the 'bash' filemanager system lacks its use in terms of effectiveness.
Indeed. I love features like Ctrl+click to highlight files that have nothing in common and symlink them to another folder by drag'n'drop('n hold a key).
I usually use Nautilus when I don't really know what I want to do with which file. I also use it with file-roller. I seem to be unable to memorize the tar options. tar -xfce :-D
Offline