loop to traverse subdirectories and execute a perl script into each subdirectory
Clash Royale CLAN TAG#URR8PPP
I have a parent directory with multiples subdirectories like this
Parent_directory
subdirectory_1
perlscript.pl
file.fasta
subdirectory_2
perlscript.pl
file_2.fasta
And I would like to run the perl scipt in each subdirectory. I'm trying with the next command
find . -type d | while read d; do perl hoz-3-v1c.pl $d/* ; done
but the output is directed to the parent directory and I want the output in each subdirectory
shell
add a comment |
I have a parent directory with multiples subdirectories like this
Parent_directory
subdirectory_1
perlscript.pl
file.fasta
subdirectory_2
perlscript.pl
file_2.fasta
And I would like to run the perl scipt in each subdirectory. I'm trying with the next command
find . -type d | while read d; do perl hoz-3-v1c.pl $d/* ; done
but the output is directed to the parent directory and I want the output in each subdirectory
shell
2
Possible duplicate of How to use `find -exec` to execute command in directory of found file (not current directory)?
– roaima
Feb 20 at 22:30
find /path/to/Parent_directory -type f -name '*.pl' -execdir perl ./"" . ;
?
– DopeGhoti
Feb 20 at 22:37
add a comment |
I have a parent directory with multiples subdirectories like this
Parent_directory
subdirectory_1
perlscript.pl
file.fasta
subdirectory_2
perlscript.pl
file_2.fasta
And I would like to run the perl scipt in each subdirectory. I'm trying with the next command
find . -type d | while read d; do perl hoz-3-v1c.pl $d/* ; done
but the output is directed to the parent directory and I want the output in each subdirectory
shell
I have a parent directory with multiples subdirectories like this
Parent_directory
subdirectory_1
perlscript.pl
file.fasta
subdirectory_2
perlscript.pl
file_2.fasta
And I would like to run the perl scipt in each subdirectory. I'm trying with the next command
find . -type d | while read d; do perl hoz-3-v1c.pl $d/* ; done
but the output is directed to the parent directory and I want the output in each subdirectory
shell
shell
edited Feb 21 at 0:26
mosvy
8,2871732
8,2871732
asked Feb 20 at 22:16
erick rodriguezerick rodriguez
132
132
2
Possible duplicate of How to use `find -exec` to execute command in directory of found file (not current directory)?
– roaima
Feb 20 at 22:30
find /path/to/Parent_directory -type f -name '*.pl' -execdir perl ./"" . ;
?
– DopeGhoti
Feb 20 at 22:37
add a comment |
2
Possible duplicate of How to use `find -exec` to execute command in directory of found file (not current directory)?
– roaima
Feb 20 at 22:30
find /path/to/Parent_directory -type f -name '*.pl' -execdir perl ./"" . ;
?
– DopeGhoti
Feb 20 at 22:37
2
2
Possible duplicate of How to use `find -exec` to execute command in directory of found file (not current directory)?
– roaima
Feb 20 at 22:30
Possible duplicate of How to use `find -exec` to execute command in directory of found file (not current directory)?
– roaima
Feb 20 at 22:30
find /path/to/Parent_directory -type f -name '*.pl' -execdir perl ./"" . ;
?– DopeGhoti
Feb 20 at 22:37
find /path/to/Parent_directory -type f -name '*.pl' -execdir perl ./"" . ;
?– DopeGhoti
Feb 20 at 22:37
add a comment |
2 Answers
2
active
oldest
votes
It looks like you don't have to bother with find
at all in this instance.
for dirpath in Parent_directory/*/; do
( cd "$dirpath" && perl perlscript.pl *.fasta )
done
This assumes that the Perl script is always called perlscript.pl
(as in your example directory layout) and that correct way to run your Perl script inside each directory is
perl perlscript.pl *.fasta
In the loop above, the parentheses creates a subshell. This prevents the cd
from affecting the rest of the script and we don't have to cd
back out of the directory after running the Perl script.
The loop will iterate over all subdirectories of Parent_directory
and execute the given commands in each.
add a comment |
If your find
supports the -execdir
predicate (GNU, BSDs at least):
find . -name perlscript.pl -execdir sh -c 'exec perl ./perlscript.pl *.fasta' ;
searches for the perlscript.pl
files and runs perl
on it with the current directory set to the directory where it's found.
We need a shell to expand the *.fasta
glob.
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
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
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f501970%2floop-to-traverse-subdirectories-and-execute-a-perl-script-into-each-subdirectory%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
It looks like you don't have to bother with find
at all in this instance.
for dirpath in Parent_directory/*/; do
( cd "$dirpath" && perl perlscript.pl *.fasta )
done
This assumes that the Perl script is always called perlscript.pl
(as in your example directory layout) and that correct way to run your Perl script inside each directory is
perl perlscript.pl *.fasta
In the loop above, the parentheses creates a subshell. This prevents the cd
from affecting the rest of the script and we don't have to cd
back out of the directory after running the Perl script.
The loop will iterate over all subdirectories of Parent_directory
and execute the given commands in each.
add a comment |
It looks like you don't have to bother with find
at all in this instance.
for dirpath in Parent_directory/*/; do
( cd "$dirpath" && perl perlscript.pl *.fasta )
done
This assumes that the Perl script is always called perlscript.pl
(as in your example directory layout) and that correct way to run your Perl script inside each directory is
perl perlscript.pl *.fasta
In the loop above, the parentheses creates a subshell. This prevents the cd
from affecting the rest of the script and we don't have to cd
back out of the directory after running the Perl script.
The loop will iterate over all subdirectories of Parent_directory
and execute the given commands in each.
add a comment |
It looks like you don't have to bother with find
at all in this instance.
for dirpath in Parent_directory/*/; do
( cd "$dirpath" && perl perlscript.pl *.fasta )
done
This assumes that the Perl script is always called perlscript.pl
(as in your example directory layout) and that correct way to run your Perl script inside each directory is
perl perlscript.pl *.fasta
In the loop above, the parentheses creates a subshell. This prevents the cd
from affecting the rest of the script and we don't have to cd
back out of the directory after running the Perl script.
The loop will iterate over all subdirectories of Parent_directory
and execute the given commands in each.
It looks like you don't have to bother with find
at all in this instance.
for dirpath in Parent_directory/*/; do
( cd "$dirpath" && perl perlscript.pl *.fasta )
done
This assumes that the Perl script is always called perlscript.pl
(as in your example directory layout) and that correct way to run your Perl script inside each directory is
perl perlscript.pl *.fasta
In the loop above, the parentheses creates a subshell. This prevents the cd
from affecting the rest of the script and we don't have to cd
back out of the directory after running the Perl script.
The loop will iterate over all subdirectories of Parent_directory
and execute the given commands in each.
edited Feb 21 at 16:53
answered Feb 20 at 23:02
KusalanandaKusalananda
136k17256424
136k17256424
add a comment |
add a comment |
If your find
supports the -execdir
predicate (GNU, BSDs at least):
find . -name perlscript.pl -execdir sh -c 'exec perl ./perlscript.pl *.fasta' ;
searches for the perlscript.pl
files and runs perl
on it with the current directory set to the directory where it's found.
We need a shell to expand the *.fasta
glob.
add a comment |
If your find
supports the -execdir
predicate (GNU, BSDs at least):
find . -name perlscript.pl -execdir sh -c 'exec perl ./perlscript.pl *.fasta' ;
searches for the perlscript.pl
files and runs perl
on it with the current directory set to the directory where it's found.
We need a shell to expand the *.fasta
glob.
add a comment |
If your find
supports the -execdir
predicate (GNU, BSDs at least):
find . -name perlscript.pl -execdir sh -c 'exec perl ./perlscript.pl *.fasta' ;
searches for the perlscript.pl
files and runs perl
on it with the current directory set to the directory where it's found.
We need a shell to expand the *.fasta
glob.
If your find
supports the -execdir
predicate (GNU, BSDs at least):
find . -name perlscript.pl -execdir sh -c 'exec perl ./perlscript.pl *.fasta' ;
searches for the perlscript.pl
files and runs perl
on it with the current directory set to the directory where it's found.
We need a shell to expand the *.fasta
glob.
answered Feb 21 at 17:16
Stéphane ChazelasStéphane Chazelas
310k57584945
310k57584945
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
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
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f501970%2floop-to-traverse-subdirectories-and-execute-a-perl-script-into-each-subdirectory%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
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
Required, but never shown
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
Required, but never shown
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
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
2
Possible duplicate of How to use `find -exec` to execute command in directory of found file (not current directory)?
– roaima
Feb 20 at 22:30
find /path/to/Parent_directory -type f -name '*.pl' -execdir perl ./"" . ;
?– DopeGhoti
Feb 20 at 22:37