Chaining together exec within find


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Chaining together exec within find
# 1  
Old 06-16-2017
Chaining together exec within find

I need to do the following with a find command on my AIX box

Find all files that are -type f

Then do the following steps:-
  • Take a listing of them, and write them to a log in /directory/backup/log
  • Tar them up in /directory/backup/tar
  • and remove the files.

Here is what I have so far:

Code:
find /directory/files -type f -exec ls -latr >> /directory/backup/log/2.log \; -exec tar -cvf * /directory/backup/tar/testtar.tar * \; -exec rm -f {} \;

When I have three files-

Code:
 
 Testfile1.text
 Testfile2.text
 Testfile3.text

It does the following-

Removes the first file
Tars up the second two
Writes the second two to a log in the directory the find statement is being executed in

What could I be doing wrong?

Thanks in advance

Last edited by rbatte1; 06-19-2017 at 11:42 AM.. Reason: Changed fir st CODE tags to ICODE tags for inline-code and added a bullet list.
# 2  
Old 06-16-2017
What -exec tar -cvf * /something/ * does only depends on your current directory, because the *'s are evaluated by the shell before it is run. exec is not a shell and would not handle the *'s if you escaped them, either.

What is that one in particular meant to do?
# 3  
Old 06-16-2017
Thanks for the input.

I want it to tar up the results of the find command. There will be other parameters, such as size, age, etc.. But for this example I only included -type f

Last edited by rbatte1; 06-19-2017 at 11:43 AM.. Reason: Changed CODE tags to ICODE tags
# 4  
Old 06-16-2017
>> /directory/backup/log/2.log is similarly handled by shell, not exec, but in this case probably does close to what you want, except it will capture all stdout, not just ls. This may not matter if nothing else prints to stdout.
# 5  
Old 06-16-2017
I still don't understand what that tar command is intended to do.

What filename is it supposed to create, and where?
# 6  
Old 06-16-2017
Since tar may be run multiple times, you need to use the append option, not the create option.

How about:

Code:
$ tar -rf archive.tar # Create empty tar file to append to

$ find testout -type f -exec echo ls -latrd '{}' ';' -exec echo tar -rvf archive.tar '{}' ';' -exec echo rm '{}' ';'

ls -latrd testout/testfile1
tar -rvf archive.tar testout/testfile1
rm testout/testfile1
ls -latrd testout/testfile2
tar -rvf archive.tar testout/testfile2
rm testout/testfile2
ls -latrd testout/testfile3
tar -rvf archive.tar testout/testfile3
rm testout/testfile3

# remove echos to actually run these commands instead of printing them

If you have GNU find, you can use + instead of ; for increased efficiency as it will bundle several files into each call:

Code:
$ find testout -type f -exec echo ls -latrd '{}' '+' -exec echo tar -rvf /absolute/path/to/archive.tar '{}' '+' -exec echo rm '{}' '+'

ls -latrd testout/testfile1 testout/testfile2 testout/testfile3
tar -rvf /absolute/path/to/archive.tar testout/testfile1 testout/testfile2 testout/testfile3
rm testout/testfile1 testout/testfile2 testout/testfile3

$


Last edited by Corona688; 06-16-2017 at 03:45 PM..
# 7  
Old 06-16-2017
Here is what I am trying to do, and I could be taking the wrong approach.

I have a bunch of directories that need to have their files purged, based on certain criteria. For example.

/folder/one <- Delete files that are 30 days old, and more than 2MB
/folder/two <- Delete files that are 7 days old, and have the extension PDF
/folder/three <- Delete files that are 7 days old, extension PDF, more than 2MB

We have a script that runs that does a basic find, and exec -rm -f, but we want to add logging, and take a compressed backup of the files, and throw them into a preserve directory for X days until we need them.

Any suggestions? Am I taking the right approach.

Thanks
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

2 exec in find

Guys, I want to find the log files greather than 23 days and i want to perform 2 things here. one is to list the files and second is to gzip the files. hope this can be done using sh -c option. but not sure the exact command. find . -name "*.log" -mtime +23 -exec ls -la {} \; ... (5 Replies)
Discussion started by: AraR87
5 Replies

2. Shell Programming and Scripting

find command with -exec

Hi all, Please could someone help with the following command requirement. I basically need to find files NEWER than a given file and order the result on time. My attempt so far is as follows: find . -newer <file_name> -exec ls -lrt {} ;\ But I dont seem to get the right result... (12 Replies)
Discussion started by: jonnyd
12 Replies

3. Shell Programming and Scripting

find: missing argument to `-exec' while redirecting using find in perl

Hi Friends, Please help me to sort out this problem, I am running this in centos o/s and whenever I run this script I am getting "find: missing argument to `-exec' " but when I run the same code in the command line I didn't find any problem. I am using perl script to run this ... (2 Replies)
Discussion started by: ramkumarselvam
2 Replies

4. Ubuntu

Find and EXEC

This is a huge issue. and I need it fixed ASAP. account-system gate-system race_traffic_sensor achievement-system global race_voicepack admin glue-system realdriveby admin-system gps realism-system... (5 Replies)
Discussion started by: austech360
5 Replies

5. Ubuntu

Find and exec

Hello, I am a linux newbe. I want to install a program. I can download it only with wget command from internet. As far as i know this wget command does not transfer the exacutable flags. Because of that i wanted to find all configure files and change their mod to 744. I found this... (1 Reply)
Discussion started by: disconnectus
1 Replies

6. UNIX for Dummies Questions & Answers

Find Exec

Hello All, Is there a way to make exec do a couple of operations on a single input from find? For example, find . -type d -exec ls -l "{}" ";" I would like to give the result of each "ls -l" in the above to a wc. Is that possible? I want to ls -l | wc -l inside... (1 Reply)
Discussion started by: prasanna1157
1 Replies

7. Shell Programming and Scripting

Using MV FIND and -EXEC

Hi, i would like to rename files in directories and subdirs. Files contains specific french or strange caracters. I want to replace all non alpha-numerics by _ (underscore) First, i made this, but i think the "for" is limited. How can i do this directly by FIND ? for file in $(find .... (0 Replies)
Discussion started by: degraff63
0 Replies

8. Shell Programming and Scripting

| with find -exec

can we use |(pipe operator) with find -exec.....? or can pipe the output of find command to another command...? if not, why...? pls explain (3 Replies)
Discussion started by: vijay_0209
3 Replies

9. UNIX for Advanced & Expert Users

query about find and -exec

Hi, i have query about "find" command. Do I need to put the command after -exec in single quotes? Why? For ex. see output of these three find commands. Any explanations? cheers, -Ashish (2 Replies)
Discussion started by: shriashishpatil
2 Replies

10. UNIX for Advanced & Expert Users

find and exec

Hi, Happy new year. Would you be so kind to explain me what does this instruction : find /rep/app -type l -exec ls -l {} \;> allink.lst Many thanks. (2 Replies)
Discussion started by: big123456
2 Replies
Login or Register to Ask a Question