Łukasz Wieczorek's blog A slice of programmer's life

Restoring default directories

If you are using GNOME or similar desktop environment you might want sometimes delete default directories if you do not use them. Later on you figure out it would be cool to have them back, but when you create a new directory it does not have the good looking icon on it.

You can fix it with the below two commands which will regenerate the default directories.

rm ~/.config/user-dirs.dirs
xdg-user-dirs-update

Checking file encoding

Example

Tired of checking file encodings?

cd $directory
for file in *; echo "$file — "(uchardet $file); end

Packages

uchardet

Warmup

Intro

I decided to use this blog as a place were I share things I discover when working as a software engineer.

Starting with shell commands!

I am using Debian and Bash or Fish (you might want to ask which operator has higher precedence here).

Line endings

Ever thought how to convert those ^M characters in VIM that represent Windows line endings (CRLF) to Unix line endings (LF)?

You can do it with tr or dos2unix:

tr -d '\015' < $input > $output

or

dos2unix $input

If you need to convert all files in a directory use find with exec flag:

find $directory -type f -exec dos2unix {} \;

Finding packages

Now how do I know what package has the dos2unix executable?

dpkg -S $executable

there is also another program which does the same:

dlocate $executable

and another:

apt-file update
apt-file search $executable

Notice that this produces lots of output if you give it just the name, try with full path instead.

whereis $executable
which $executable
apt-file search $full_executable_path

Secure data erasure

You sometimes do not want others to recover your files, say for example, with passwords right?

wipe $file
wpie -r $directory

Git history start rewrite

You work with Git, right? How do you rebase the initial commit then?

git rebase --interactive --root

In-place file modification

You probably tried:

tr 'a' 'z' < $input > $input

somewhere in time and it did not work, leaving you with empty file.

Well you cannot read and write at the same time from and to the same file because it is being processed.

Think of it as changing the for loop index while in the loop.

But you probably just want to do the operation in place, and there is a way.

Ta da, da da dam: SPONGE!

tr 'a' 'z' < $input | sponge $input

Outro

Please, please, please

Please share the post if you liked it.

Thanks!

Appendix

Packages:

coreutils, dos2unix, findutils, dpkg, dlocate, apt-file, debianutils, wipe, git, moreutils.

Credits: