1

I'm trying to learn bash -slowly- but finding it difficult to get a grasp of the more technical aspects without a real-word example that fits something I would want to use. To that end, I'd like to know how to use bash (and 7zip) to archive some photos in preparation for storing them online.

Essentially, I imagine this is as 'simple' as making a .7z archive of each directory, assigning each archive the same name as the relevant directory. All directories have been named without spaces, should that matter.

Grateful for all advice.

1 Answer 1

4

The way to compress a directory foo to an archive named foo.7z using 7z is to use command a ("add"):

7z a foo.7z foo 

To do so for multiple directories, one could use a loop:

for dir in foo bar baz; do 7z a "$dir".7z "$dir" done 

(This is safe against directory names that include spaces, because $dir is quoted, but not against directory names that start with a dash; those would result in 7z attempting to interpret them as options.)

If the name of directories you intend to archive share a pattern, then you could use that in the for loop, instead of listing all directories explicitly, e.g. for dir in [0-9][0-9][0-9][0-9][0-9][0-9]-*; ....

Note that the 7z documentation warns against using the 7z format for archival purposes on Unix, because it doesn't preserve ownership information. This may or may not matter for you.

6
  • I don't know if this answers your question; please comment if not. Commented Dec 14, 2015 at 17:02
  • Thanks @dhag, the for loop idea is just what I'm looking for. Unfortunately, the naming pattern I have for the photos isn't as convenient as that, although they all start with six numbers and a dash to signify a date, instead being descriptive of occasions, people, etc. (e.g. "131225-Christmas-Day"). Does this mean I have to explicitly list every directory to be archived (trivial with 'ls', I assume), and that there's no way of more simply having the loop act on all directories? Commented Dec 14, 2015 at 19:15
  • 1
    I updated my answer to include an example that matches the format you showed: file names starting with six digits, followed by a dash. Commented Dec 14, 2015 at 19:19
  • I forgot to say that I don't need to keep any Linux ownerships or permissions in this case, so 7z will be fine. Commented Dec 14, 2015 at 19:19
  • Brilliant! Even before watching it do exactly what I wanted, seeing the format of your updated answer and how it applied to my photos was instantly explanatory. Thanks again! Commented Dec 14, 2015 at 19:40

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.