This article would give you quick Linux command tips to perform operation and work with files and directories effectively
Create Multiple Directories at once
mkdir path/to/{test,work,pictures,newDir}
No spaces around comma ( , ) in side curly braces {}
Above command creates all given directories inside curly braces {} at specified location. Here in this case “test, work, pictures and newDir”. This command will create path/to/test, path/to/work, path/to/pictures and path/to/newDir
Create Multiple Files Using touch Command At once
Multiple files can be created at once by passing names enclosed by curly braces {} and separated by comma (,)
touch {pictures,work,fun}
touch /path/to/{pictures,work,fun}
Remove All Files Except Specified
This is my favorite command. Using following syntax you can remove all files except the one or more specified using command rm .
rm !(<file_to_keep>|<another_file_to_keep>)
Let’s say we have following files
ls
cg manage python test world
We want to keep files test and cg and delete rest, here is the way
rm !(test|cg)
Same thing can also be achieved by using the command find .
find . -type f ! -name 'filename' -delete
Create Directories Recursively
Use command line option -p on command “mkdir” to create directories recursively without getting error
mkdir -p /home/demo/server/www
Since we passed option -p, mkdir command will create all directories recursively if any directory in the specified path doesn’t exist
Rename Files By Using Regular Expression
There is a handy command called “rename” to rename multiple files according to given pattern. This rename command uses the sed command syntax.
Let’s learn this command by example. For suppose we have following files,
ls
testfile work worker workspace
I want to rename/replace work in every file to test. We can achieve this by following command
rename 's/work/test/' *
As said syntax is similar to command sed. Describing ‘s/work/test’. Where,
- s is the command which stands for substitute
- work in ‘s/work/test’ is the text to replace
- test in ‘s/work/test’ is the text to get replaced
If you want to see what files are going to get renamed instead of taking action. You can do it so by passing command line argument -n .
rename -n 's/work/test/' *
rename(work, test)
rename(worker, tester)
rename(workspace, testspace)
Display File Type Based On Content
We humans and some programs recognize the type of file by it’s extension but it is not reliable. Sometimes actual file type could be something else than file extension it has. Actual file type by it’s content can be displayed using command “file” .
$ file <path/to/file>
Command file is more capable than querying file type
Pass desired file path (absolute or relative) to the command file to get it’s type
file welcome.mp3
welcome.mp3: MPEG ADTS, layer III, v2, 24 kbps, 16 kHz, Monaural
Query mime type of file instead of verbose description with command line option -i .
file -i welcome.mp3
welcome.mp3: audio/mpeg; charset=binary
Print only File type without echoing file name
file -b cg
ASCII text
Create Symbolic Links
Basically there are two types of symbolic links, those are Hard Link and Soft (Symbolic) Link . Think of them as short cuts on windows
Hard links associate file names of created links with same inode. As a result they share the same data block on the disk. It is perceived as independent copy of files.
A file is said to be completely delete only if the file and all of it’s hard links are deleted.
Symbolic Link or Symlink or Soft Link is a file which points to another file. Unlike hard Links, soft links point to path on the file system instead of physical location(inode).
Hard linking is not allowed for directories, hard links can only be created for files. Where as, soft links can be created for both files and directories
Command ln is used to create Symbolic Links
ln <source> <link>
Create Hard Link
ln /path/to/source /path/to/link
Create Soft Link
The command ln created soft link command line argument -s is passed
ln -s /path/to/source /path/to/link
Display File Meta Data
The command stat can be used to display file or file system meta data.
stat testfile
File: testfile
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 1612373 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-03-25 21:30:20.240532016 +0530
Modify: 2019-03-25 21:30:20.240532016 +0530
Change: 2019-03-25 21:30:20.240532016 +0530
Birth: -
Move All Files and Folders Except Specified
Following command would help you to move all files and folder in current working directory except specified once.
mv !(<file_to_keep>|<another_file_to_keep>) destination
ls
abc fileA fileB mdir test xyz
Following command will move all but specified to destination directory
mv !(fileA|fileB) /opt/dst
Above command will move all files but specified fileA and fileB to destination /opt/dst
Move all files but specified using the command find
We can also move all but specified using the command find. Using the command find will give us advantage of more fine control over filters.
Move file & folders inside current working directory to specified destination
find -maxdepth 1 -not -name "abc" -exec mv {} /opt/dst \;
Describing above command. Where,
- Option -maxdepth 1 will force find to look for files & folders in current working or given directory only
- Option -not negates the match. Spits out all but matched
- Option –name “abc” . -name takes string too look up files which contain given name. Here, it means to look for file named or contains “abc”.
- -exec takes external command to execute on matched files.
- {} will be replaced by matched file/folder path in every match.
You can spice it up, if you are comfortable with regular expressions to match multiple files
find -maxdepth 1 -type f -regextype egrep -not -regex './(fileA|fileB)' -exec mv {} /opt/dst \;
Above command match only files (-type f) other than fileA and fileB and move
(-exec mv {} /opt/dst \;) operation on matched
Switch to Previous Working Directory
As we switch directories or change current working directory using command cd . Linux updates the environment variable both OLDPWD and PWD. we can use environment variable OLDPWD to switch back to previous working directory.
Switch to old working directory
cd $OLDPWD
We can also switch to previous working directory using “cd -“
cd -
List Hidden Files
List all files including hidden files
ls -a
ls -la
Delete Files Based On Their Age
The command find can be used to filter files or folder by their age and perform desired action
find /path/to/files -type f -mtime <time> -exec rm {} \;
find /path/to/files -type f -mtime +7 -exec rm {} \;
Describing Above Command
- /path/to/files is the path to look for files
- -type f is to limit find lookup by files
- -mtime +5 => -mtime is used to specify time like how old the file can be. +7 means, find files older than 7 days.
- -exec allows you to execute external command on filters such as rm.
- {} will be replaced by found file/folder.
- ;\ is required at the end for this command to work.
Display Files Inside tar file or archive
To just check what is inside an archive, we don’t need to extract it. Following commands can be used to see files inside archive.
tar -tf filename.tar
Read PDF File In Linux Terminal
Well, there is nothing magical we need to read PDF files on Linux command line (terminal).All you need is the command less .
less /path/to/file.pdf
Empty The File Without Deleting
If you want remove the content of a file instead of deleting it, you don’t have to open a file. Instead you can use the following syntax to empty it.
> filename
Print First n Lines Of A File
The command head helps you print first n lines of file. It takes command line option -n by default it is 10 if not passed
head filename
Following command prints first 5 lines since command line arg -n 5 is passed
head -n 5 filename
Print Last n Lines Of A File
The command tail helps you to print last n lines of the file. Number of lines it prints is 10 by default if n is not passed.
tail filename
Following command prints only last 5 lines since command line arg -n 5 is passed
tail -n 5 filename
If file tend to change often (ex: log file) we can force tail command to listen for added lines at the end and print on console
tail -f filename.log
Leave a Reply