Designing better file organization around tags, not hierarchies
Speaking personally, I'm fed up with HFSes, on Windows, Linux, and . Even in the full case of walking over files and directories recursively, the .. You can also query a tag and see the list of all images that have the tag. The command line is not only powerful, it can also be dangerous. Learn how to use commands for deleting files and folders correctly to make sure In the case of multiple files, you'll see one query for each file. The rm command has a powerful option, -R (or -r), otherwise known as the recursive option. In this article, Mr. Make outlines a pattern for non-recursive Make systems that of automatically walking up the source tree to find corrosion-corrintel.info files. Here I've shown definitions for Linux systems, but these can easily be . DEPENDS_ON is more flexible since without recursion you can specify a relationship.
Unix favors programs that do one thing and do it well, as well as programs that are simple in both interface and implementation sometimes called worse is better. The key piece of the puzzle here is realizing that cp does not copy directories - cp copies files and only files. If you want to copy a directory, cp calls itself recursively, in order to copy the files on each directory.
Of course, the difference between "copying directories" and "copying files recursively" is absolutely nothing, from a user's perspective, but having this interface helps the implementation remain simple. If you made cp able to copy directories, you'd soon be tempted to add more features that only make sense for directories - for example, you might want to only copy filenames that ended in.
Inevitably, this leads to the bloat and feature creep that we are used to in other operating systems - making software slow, complex and error-prone. Another advantage is that having -r also helps the user understand what is really happening underneath the interface.
Now to discuss the problems. Working with hard links requires a great deal of care — when copying or backing up an entire directory tree, you want to preserve the hard link structure to avoid duplication and to keep the behavior when shared files are edited; when reclassifying files you need to pay special attention not to delete the last hard link to a file.
They are non-scalable kludges compared to true tagging. Mutability as a liability By default, all files in a hierarchical file system are mutable a. This makes a lot of sense because some notion of file system mutability is required to get any work done at all. Also, because the paths pointing to a file stay the same even after it is edited, there is no ambiguity about what it means to edit a file. These factors together allow a usable file system to be implemented with low complexity.
Again, while mutability seems reasonable on the surface, it creates problems at the large scale. The freedom to modify any file hurts when files need to be compared, backed up, shared, synchronized, or referenced.
If you have a collection of work files on your desktop, which you transfer to your laptop, then you edited a few files on your laptop, you cannot easily tell which files have been edited.
Sometimes you want to archive a set of files and be very careful to never edit or delete them. HFSes have a partial solution to this problem, which is to disable writing for a file Unix style or set the read-only flag for the file Windows style. But it is still easy to accidentally disturb the supposedly archival files.
If a folder contains archival and non-archival files at the same time such as live documents alongside draft snapshotsthen you might forget this fact and accidentally move or delete the directory in such a way that violates your intent.
command line - search in subdirectories for all html files containing the tag - Ask Ubuntu
Hashing is one mechanism that satisfies this property. Generating a new random name every time a file is edited is also possible, but it has fewer desirable properties than hashing.
Difficult backups and caches Hierarchical file systems provide no help in keeping track of how many copies you own of a particular a file or set of files. You go and buy an external disk, plug it in, and copy the entire videos folder from your internal drive to the external drive — simple and easy to understand. Now you update your primary video collection by adding new files and editing a few. You want to update your backup to match, but what should you do? The simplest and least error-prone approach is to ignore the existing backup and add a complete new copy of your current folder; you may choose to delete the existing backup.
We know that in general, it is impossible to tell if two file paths have the same content without fully reading both files. An incremental backup program would probably use the heuristic of checking file sizes, timestamps, and archive bits to see if a file needs to be re-copied. The heuristic works well in practice, but can still be subverted by accident by a well-meaning tool that forges timestamps or by malice. By changing some file content without changing its size or timestamp, it is possible that an incremental backup program does not copy the actually changed file to the backup storage for an arbitrarily long time.
You keep the primary copy of all your files on your desktop computer, but copy a few files such as books and movies to your laptop for temporary use.
But you have to be extremely careful to never add a non-cached file to it such as a newly edited documentnever directly modify any files in the cached directory, and never modify one of the files on your desktop without updating the laptop cache. As we can see, the idea of mutable files quickly changes from a convenience to a liability, and the file system does nothing to help us keep track of file changes or duplicate copies. But let's say we tagged a group of files and wanted to copy and rename them as they are copied or moved.
How would we do that? Midnight Commander provides a way of doing it, but it's a little strange. The secret is the source mask in the copy dialog. At first glance, it appears that the source mask is simply a file selection wildcard, but first appearances can be deceiving. The mask does filter files as we would expect, but only in a limited way. Unlike the range of wildcards available in the shell, the wildcards in the source mask are limited to "? What's more, the wildcards have a special property.
It works like this: This wildcard pattern will match the file ugly file, since its name consists of two strings of characters separated by a space. Midnight Commander will associate each block of text with a number starting with 1, so block 1 will contain "ugly" and block 2 will contain "file". Each block can be referred to by a number as with regular expression grouping. Using grouping The "? If we make the source mask "????
Midnight Commander can also perform case conversion on file names. To do this, we include some additional escape sequences in the to mask: Creating Links Midnight Commander can create both hard and symbolic links.
They are created using these 3 keyboard commands which cause a dialog to appear where the details of the link can be specified: Ctrl-x l creates a hard link, in the directory shown in the current panel. Ctrl-x s creates a symbolic link in the directory shown in the other panel, using an absolute directory path.
Ctrl-x v creates a symbolic link in the directory shown in the other panel, using a relative directory path. The two symbolic link commands are basically the same. They differ only in the fact that the paths suggested in the Symbolic Link dialog are absolute or relative. We'll demonstrate creating a symbolic link by creating a link to file1. To do this, we select file1 in the current panel and type Ctrl-x s. The Symbolic Link dialog appears and we can either enter a name for the link or we can accept the program's suggestion.
For the sake of clarity, we will change the name to file1-sym. Doing so will display a dialog box in which each attribute can be turned on or off. If Midnight Commander is being run with superuser privileges, file ownership can be changed by typing Ctrl-x o. Chmod dialog To demonstrate changing file modes, we will make file1 executable.
First, we will select file1 and then type Ctrl-x c. The Chmod command dialog will appear, listing the file's mode settings.
Deleting Files Pressing the F8 key deletes the selected or tagged files and directories. By default, Midnight Commander always prompts the user for confirmation before deletion is performed. We're done with our playground for now, so it's time to clean up. We will enter cd at the shell prompt to get the current panel to list our home directory. Next, we will select playground and press F8 to delete the playground directory.
Delete confirmation dialog Power Features Beyond basic file manipulation, Midnight Commander offers a number of additional features, some of which are very interesting. Virtual File Systems Midnight Commander can treat some types of archive files and remote hosts as though they are local file systems.
Using the cd command at the shell prompt, we can access these. For example, we can look at the contents of tar files.
We can do this by entering this command at the shell prompt: If we select this file and press Enter, the contents of the archive will be displayed in the current panel. Notice that the shell prompt does not change as it does with ordinary directories. This is because while the current panel is displaying a list of files like before, Midnight Commander cannot treat the virtual file system in the same way as a real one. For example, we cannot delete files from the tar archive, but we can copy files from the archive to the real file system.
Virtual file systems can also treat remote file systems as local directories. Its name is ftp. The FISH protocol is similar. This protocol can be used to communicate with any Unix-like system that runs a secure shell SSH server. If we have write permissions on the remote server, we can operate on the remote system's files as if they were local. This is extremely handy for performing remote administration.
The cd command for FISH protocol looks like this: When invoked by pressing Alt-? Find dialog On this dialog we can specify: This feature is well-suited to searching large trees of source code or configuration files for specific patterns of text.
To do this, we would fill in the dialog as follows: Search results Panelizing There is a button at the bottom of the search results dialog labeled "Panelize. From here, we can act on the files just as we can with any others. In fact, we can create a panelized list from any command line program that produces a list of path names. For example, the find program. To do this, we use Midnight Commander's "External Panelize" feature.
External panelize dialog On this dialog we see a predefined list of panelized commands. Midnight Commander allows us to store commands for repeated use. Let's try it by creating a panelized command that searches the system for every file whose name has the extension. JPG starting from the current panel directory. Select "Other command" from the list and type the following command into the "Command" field: JPG" After typing the command we can either press Enter to execute the command or, for extra fun, we can click the "Add new" button and assign our command a name and save it for future use.
Sub-shells We may, at any time, move from the Midnight Commander to a full shell session and back again by pressing Ctrl-o. The sub-shell is a copy of our normal shell, so whatever environment our usual shell establishes aliases, shell functions, prompt strings, etc.