Unrar to folder with same name as archive
Clash Royale CLAN TAG#URR8PPP
up vote
4
down vote
favorite
I have a lot of rar files
- Folder/
--- Spain.rar
--- Germany.rar
--- Italy.rar
All the files contains no root folder so it's just files.
What I want to achieve when extracting is this structure:
- Folder/
-- Spain/
---- Spain_file1.txt
---- Spain_file2.txt
-- Germany/
---- Germany_file1.txt
---- Germany_file2.txt
-- Italy/
---- Italy_file1.txt
---- Italy_file2.txt
So that a folder with the name of the archive is created and the archive is extracted to it.
I found this bash example in another thread but it's not working for me, it's trying to create one folder with all the files as name.
#!/bin/bash
for archive in "$(find . -name '*.rar')"; do
destination="$archive%.rar"
if [ ! -d "$destination" ] ; then mkdir "$destination"; fi
unrar e "$archive" "$destination"
done
Any ideas how I can do this?
shell-script archive rar
New contributor
add a comment |Â
up vote
4
down vote
favorite
I have a lot of rar files
- Folder/
--- Spain.rar
--- Germany.rar
--- Italy.rar
All the files contains no root folder so it's just files.
What I want to achieve when extracting is this structure:
- Folder/
-- Spain/
---- Spain_file1.txt
---- Spain_file2.txt
-- Germany/
---- Germany_file1.txt
---- Germany_file2.txt
-- Italy/
---- Italy_file1.txt
---- Italy_file2.txt
So that a folder with the name of the archive is created and the archive is extracted to it.
I found this bash example in another thread but it's not working for me, it's trying to create one folder with all the files as name.
#!/bin/bash
for archive in "$(find . -name '*.rar')"; do
destination="$archive%.rar"
if [ ! -d "$destination" ] ; then mkdir "$destination"; fi
unrar e "$archive" "$destination"
done
Any ideas how I can do this?
shell-script archive rar
New contributor
add a comment |Â
up vote
4
down vote
favorite
up vote
4
down vote
favorite
I have a lot of rar files
- Folder/
--- Spain.rar
--- Germany.rar
--- Italy.rar
All the files contains no root folder so it's just files.
What I want to achieve when extracting is this structure:
- Folder/
-- Spain/
---- Spain_file1.txt
---- Spain_file2.txt
-- Germany/
---- Germany_file1.txt
---- Germany_file2.txt
-- Italy/
---- Italy_file1.txt
---- Italy_file2.txt
So that a folder with the name of the archive is created and the archive is extracted to it.
I found this bash example in another thread but it's not working for me, it's trying to create one folder with all the files as name.
#!/bin/bash
for archive in "$(find . -name '*.rar')"; do
destination="$archive%.rar"
if [ ! -d "$destination" ] ; then mkdir "$destination"; fi
unrar e "$archive" "$destination"
done
Any ideas how I can do this?
shell-script archive rar
New contributor
I have a lot of rar files
- Folder/
--- Spain.rar
--- Germany.rar
--- Italy.rar
All the files contains no root folder so it's just files.
What I want to achieve when extracting is this structure:
- Folder/
-- Spain/
---- Spain_file1.txt
---- Spain_file2.txt
-- Germany/
---- Germany_file1.txt
---- Germany_file2.txt
-- Italy/
---- Italy_file1.txt
---- Italy_file2.txt
So that a folder with the name of the archive is created and the archive is extracted to it.
I found this bash example in another thread but it's not working for me, it's trying to create one folder with all the files as name.
#!/bin/bash
for archive in "$(find . -name '*.rar')"; do
destination="$archive%.rar"
if [ ! -d "$destination" ] ; then mkdir "$destination"; fi
unrar e "$archive" "$destination"
done
Any ideas how I can do this?
shell-script archive rar
shell-script archive rar
New contributor
New contributor
edited 2 hours ago
Gilles
515k12210241553
515k12210241553
New contributor
asked 3 hours ago
Dennis Wiencken
235
235
New contributor
New contributor
add a comment |Â
add a comment |Â
1 Answer
1
active
oldest
votes
up vote
3
down vote
accepted
I have a script in my personal archive that does exactly this. More precisely, it extracts e.g. Spain.rar
to a new directory called Spain
, except that if all the files in Spain.rar
are already under the same top-level directory, then this top-level directory is kept.
#!/bin/sh
# Extract the archive $1 to a directory $2 with the program $3. If the
# archive contains a single top-level directory, that directory
# becomes $2. Otherwise $2 contains all the files at the root of the
# archive.
extract () (
set -e
archive=$1
case "$archive" in
-) :;; # read from stdin
/*) :;; # already an absolute path
*) archive=$PWD/$archive;; # make absolute path
esac
target=$2
program=$3
if [ -e "$target" ]; then
echo >&2 "Target $target already exists, aborting."
return 3
fi
case "$target" in
/*) parent=$target%/*;;
*/[!/]*) parent=$PWD/$target%/*;;
*) parent=$PWD;;
esac
temp=$(TMPDIR="$parent" mktemp -d)
(cd "$temp" && $program "$archive")
root=
for member in "$temp/"* "$temp/".*; do
case "$member" in */.|*/..) continue;; esac
if [ -n "$root" ] || ! [ -d "$member" ]; then
root=$temp # There are multiple files or there is a non-directory
break
fi
root="$member"
done
if [ -z "$root" ]; then
# Empty archive
root=$temp
fi
mv -v -- "$root" "$target"
if [ "$root" != "$temp" ]; then
rmdir "$temp"
fi
)
# Extract the archive $1.
process () *.tbz2) program="tar -xf";;
*.tar.gz
for x in "$@"; do
process "$x"
done
Usage (after installing this script in your $PATH
under the name extract
and making it executable):
extract Folder/*.rar
This looks pretty awesome and I think this is what I need. But I am having trouble getting it to work. There seems to be something wrong with the way unrar is being called. When I run it, I get the usage example. It creates a lot of tmp folders but the extractions fails. What version of unrar did you use this on?
â Dennis Wiencken
1 hour ago
@DennisWiencken Evidently I'd never tried this version with anything but zip. Try my fixed version.
â Gilles
1 hour ago
Works like a charm now! Thank you for the help!
â Dennis Wiencken
28 mins ago
add a comment |Â
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
3
down vote
accepted
I have a script in my personal archive that does exactly this. More precisely, it extracts e.g. Spain.rar
to a new directory called Spain
, except that if all the files in Spain.rar
are already under the same top-level directory, then this top-level directory is kept.
#!/bin/sh
# Extract the archive $1 to a directory $2 with the program $3. If the
# archive contains a single top-level directory, that directory
# becomes $2. Otherwise $2 contains all the files at the root of the
# archive.
extract () (
set -e
archive=$1
case "$archive" in
-) :;; # read from stdin
/*) :;; # already an absolute path
*) archive=$PWD/$archive;; # make absolute path
esac
target=$2
program=$3
if [ -e "$target" ]; then
echo >&2 "Target $target already exists, aborting."
return 3
fi
case "$target" in
/*) parent=$target%/*;;
*/[!/]*) parent=$PWD/$target%/*;;
*) parent=$PWD;;
esac
temp=$(TMPDIR="$parent" mktemp -d)
(cd "$temp" && $program "$archive")
root=
for member in "$temp/"* "$temp/".*; do
case "$member" in */.|*/..) continue;; esac
if [ -n "$root" ] || ! [ -d "$member" ]; then
root=$temp # There are multiple files or there is a non-directory
break
fi
root="$member"
done
if [ -z "$root" ]; then
# Empty archive
root=$temp
fi
mv -v -- "$root" "$target"
if [ "$root" != "$temp" ]; then
rmdir "$temp"
fi
)
# Extract the archive $1.
process () *.tbz2) program="tar -xf";;
*.tar.gz
for x in "$@"; do
process "$x"
done
Usage (after installing this script in your $PATH
under the name extract
and making it executable):
extract Folder/*.rar
This looks pretty awesome and I think this is what I need. But I am having trouble getting it to work. There seems to be something wrong with the way unrar is being called. When I run it, I get the usage example. It creates a lot of tmp folders but the extractions fails. What version of unrar did you use this on?
â Dennis Wiencken
1 hour ago
@DennisWiencken Evidently I'd never tried this version with anything but zip. Try my fixed version.
â Gilles
1 hour ago
Works like a charm now! Thank you for the help!
â Dennis Wiencken
28 mins ago
add a comment |Â
up vote
3
down vote
accepted
I have a script in my personal archive that does exactly this. More precisely, it extracts e.g. Spain.rar
to a new directory called Spain
, except that if all the files in Spain.rar
are already under the same top-level directory, then this top-level directory is kept.
#!/bin/sh
# Extract the archive $1 to a directory $2 with the program $3. If the
# archive contains a single top-level directory, that directory
# becomes $2. Otherwise $2 contains all the files at the root of the
# archive.
extract () (
set -e
archive=$1
case "$archive" in
-) :;; # read from stdin
/*) :;; # already an absolute path
*) archive=$PWD/$archive;; # make absolute path
esac
target=$2
program=$3
if [ -e "$target" ]; then
echo >&2 "Target $target already exists, aborting."
return 3
fi
case "$target" in
/*) parent=$target%/*;;
*/[!/]*) parent=$PWD/$target%/*;;
*) parent=$PWD;;
esac
temp=$(TMPDIR="$parent" mktemp -d)
(cd "$temp" && $program "$archive")
root=
for member in "$temp/"* "$temp/".*; do
case "$member" in */.|*/..) continue;; esac
if [ -n "$root" ] || ! [ -d "$member" ]; then
root=$temp # There are multiple files or there is a non-directory
break
fi
root="$member"
done
if [ -z "$root" ]; then
# Empty archive
root=$temp
fi
mv -v -- "$root" "$target"
if [ "$root" != "$temp" ]; then
rmdir "$temp"
fi
)
# Extract the archive $1.
process () *.tbz2) program="tar -xf";;
*.tar.gz
for x in "$@"; do
process "$x"
done
Usage (after installing this script in your $PATH
under the name extract
and making it executable):
extract Folder/*.rar
This looks pretty awesome and I think this is what I need. But I am having trouble getting it to work. There seems to be something wrong with the way unrar is being called. When I run it, I get the usage example. It creates a lot of tmp folders but the extractions fails. What version of unrar did you use this on?
â Dennis Wiencken
1 hour ago
@DennisWiencken Evidently I'd never tried this version with anything but zip. Try my fixed version.
â Gilles
1 hour ago
Works like a charm now! Thank you for the help!
â Dennis Wiencken
28 mins ago
add a comment |Â
up vote
3
down vote
accepted
up vote
3
down vote
accepted
I have a script in my personal archive that does exactly this. More precisely, it extracts e.g. Spain.rar
to a new directory called Spain
, except that if all the files in Spain.rar
are already under the same top-level directory, then this top-level directory is kept.
#!/bin/sh
# Extract the archive $1 to a directory $2 with the program $3. If the
# archive contains a single top-level directory, that directory
# becomes $2. Otherwise $2 contains all the files at the root of the
# archive.
extract () (
set -e
archive=$1
case "$archive" in
-) :;; # read from stdin
/*) :;; # already an absolute path
*) archive=$PWD/$archive;; # make absolute path
esac
target=$2
program=$3
if [ -e "$target" ]; then
echo >&2 "Target $target already exists, aborting."
return 3
fi
case "$target" in
/*) parent=$target%/*;;
*/[!/]*) parent=$PWD/$target%/*;;
*) parent=$PWD;;
esac
temp=$(TMPDIR="$parent" mktemp -d)
(cd "$temp" && $program "$archive")
root=
for member in "$temp/"* "$temp/".*; do
case "$member" in */.|*/..) continue;; esac
if [ -n "$root" ] || ! [ -d "$member" ]; then
root=$temp # There are multiple files or there is a non-directory
break
fi
root="$member"
done
if [ -z "$root" ]; then
# Empty archive
root=$temp
fi
mv -v -- "$root" "$target"
if [ "$root" != "$temp" ]; then
rmdir "$temp"
fi
)
# Extract the archive $1.
process () *.tbz2) program="tar -xf";;
*.tar.gz
for x in "$@"; do
process "$x"
done
Usage (after installing this script in your $PATH
under the name extract
and making it executable):
extract Folder/*.rar
I have a script in my personal archive that does exactly this. More precisely, it extracts e.g. Spain.rar
to a new directory called Spain
, except that if all the files in Spain.rar
are already under the same top-level directory, then this top-level directory is kept.
#!/bin/sh
# Extract the archive $1 to a directory $2 with the program $3. If the
# archive contains a single top-level directory, that directory
# becomes $2. Otherwise $2 contains all the files at the root of the
# archive.
extract () (
set -e
archive=$1
case "$archive" in
-) :;; # read from stdin
/*) :;; # already an absolute path
*) archive=$PWD/$archive;; # make absolute path
esac
target=$2
program=$3
if [ -e "$target" ]; then
echo >&2 "Target $target already exists, aborting."
return 3
fi
case "$target" in
/*) parent=$target%/*;;
*/[!/]*) parent=$PWD/$target%/*;;
*) parent=$PWD;;
esac
temp=$(TMPDIR="$parent" mktemp -d)
(cd "$temp" && $program "$archive")
root=
for member in "$temp/"* "$temp/".*; do
case "$member" in */.|*/..) continue;; esac
if [ -n "$root" ] || ! [ -d "$member" ]; then
root=$temp # There are multiple files or there is a non-directory
break
fi
root="$member"
done
if [ -z "$root" ]; then
# Empty archive
root=$temp
fi
mv -v -- "$root" "$target"
if [ "$root" != "$temp" ]; then
rmdir "$temp"
fi
)
# Extract the archive $1.
process () *.tbz2) program="tar -xf";;
*.tar.gz
for x in "$@"; do
process "$x"
done
Usage (after installing this script in your $PATH
under the name extract
and making it executable):
extract Folder/*.rar
edited 1 hour ago
answered 2 hours ago
Gilles
515k12210241553
515k12210241553
This looks pretty awesome and I think this is what I need. But I am having trouble getting it to work. There seems to be something wrong with the way unrar is being called. When I run it, I get the usage example. It creates a lot of tmp folders but the extractions fails. What version of unrar did you use this on?
â Dennis Wiencken
1 hour ago
@DennisWiencken Evidently I'd never tried this version with anything but zip. Try my fixed version.
â Gilles
1 hour ago
Works like a charm now! Thank you for the help!
â Dennis Wiencken
28 mins ago
add a comment |Â
This looks pretty awesome and I think this is what I need. But I am having trouble getting it to work. There seems to be something wrong with the way unrar is being called. When I run it, I get the usage example. It creates a lot of tmp folders but the extractions fails. What version of unrar did you use this on?
â Dennis Wiencken
1 hour ago
@DennisWiencken Evidently I'd never tried this version with anything but zip. Try my fixed version.
â Gilles
1 hour ago
Works like a charm now! Thank you for the help!
â Dennis Wiencken
28 mins ago
This looks pretty awesome and I think this is what I need. But I am having trouble getting it to work. There seems to be something wrong with the way unrar is being called. When I run it, I get the usage example. It creates a lot of tmp folders but the extractions fails. What version of unrar did you use this on?
â Dennis Wiencken
1 hour ago
This looks pretty awesome and I think this is what I need. But I am having trouble getting it to work. There seems to be something wrong with the way unrar is being called. When I run it, I get the usage example. It creates a lot of tmp folders but the extractions fails. What version of unrar did you use this on?
â Dennis Wiencken
1 hour ago
@DennisWiencken Evidently I'd never tried this version with anything but zip. Try my fixed version.
â Gilles
1 hour ago
@DennisWiencken Evidently I'd never tried this version with anything but zip. Try my fixed version.
â Gilles
1 hour ago
Works like a charm now! Thank you for the help!
â Dennis Wiencken
28 mins ago
Works like a charm now! Thank you for the help!
â Dennis Wiencken
28 mins ago
add a comment |Â
Dennis Wiencken is a new contributor. Be nice, and check out our Code of Conduct.
Dennis Wiencken is a new contributor. Be nice, and check out our Code of Conduct.
Dennis Wiencken is a new contributor. Be nice, and check out our Code of Conduct.
Dennis Wiencken is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f476522%2funrar-to-folder-with-same-name-as-archive%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password