Renaming files using find

2004-08-31 Thread Gerard Samuel
Im trying to rename a few files with the .dist extension.
Im trying -
hivemind# find . -name '*.dist' -exec cp {} `basename {} .dist` \;
And Im getting -
cp: ./html.php.dist and ./html.php.dist are identical (not copied).
cp: ./horde.php.dist and ./horde.php.dist are identical (not copied).
cp: ./motd.php.dist and ./motd.php.dist are identical (not copied).
cp: ./mime_mapping.php.dist and ./mime_mapping.php.dist are identical 
(not copied).
cp: ./prefs.php.dist and ./prefs.php.dist are identical (not copied).
cp: ./registry.php.dist and ./registry.php.dist are identical (not copied).
cp: ./lang.php.dist and ./lang.php.dist are identical (not copied).
cp: ./mime_drivers.php.dist and ./mime_drivers.php.dist are identical 
(not copied).

What is wrong with the command that I issued.
Thanks
___
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to [EMAIL PROTECTED]


Re: Renaming files using find

2004-08-31 Thread Giorgos Keramidas
On 2004-08-31 11:15, Gerard Samuel [EMAIL PROTECTED] wrote:

 Im trying to rename a few files with the .dist extension.
 Im trying -
 hivemind# find . -name '*.dist' -exec cp {} `basename {} .dist` \;

 And Im getting -
 cp: ./html.php.dist and ./html.php.dist are identical (not copied).
 cp: ./horde.php.dist and ./horde.php.dist are identical (not copied).
 cp: ./motd.php.dist and ./motd.php.dist are identical (not copied).
 cp: ./mime_mapping.php.dist and ./mime_mapping.php.dist are identical (not copied).
 cp: ./prefs.php.dist and ./prefs.php.dist are identical (not copied).
 cp: ./registry.php.dist and ./registry.php.dist are identical (not copied).
 cp: ./lang.php.dist and ./lang.php.dist are identical (not copied).
 cp: ./mime_drivers.php.dist and ./mime_drivers.php.dist are identical (not copied).

 What is wrong with the command that I issued.

The basename command gets expanded by the shell you use *BEFORE* find
has a change to run.

You can try playing tricks with escaping the backquotes, which is
probably going to result very quickly in ugliness like \\\`foo\\\` or
you can use find to generate a list of filenames which will be
processed by the rest of the command-line to spit out the rename
commands, and feed them to sh(1) for execution, i.e.:

$ ls -l
total 0
-rw-rw-r--  1 keramida  wheel  - 0 Aug 31 18:33 koko.dist
-rw-rw-r--  1 keramida  wheel  - 0 Aug 31 18:33 lala.dist

$ find . -name \*.dist | \
  awk '{ printf mv \%s\ `basename \%s\ .dist`\n,$0,$0; }'

mv ./lala.dist `basename ./lala.dist .dist`
mv ./koko.dist `basename ./koko.dist .dist`

$ find . -name \*.dist | \
  awk '{ printf mv \%s\ `basename \%s\ .dist`\n,$0,$0; }' | sh

$ ls -l
total 0
-rw-rw-r--  1 keramida  wheel  - 0 Aug 31 18:33 koko
-rw-rw-r--  1 keramida  wheel  - 0 Aug 31 18:33 lala

___
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to [EMAIL PROTECTED]


Re: Renaming files using find

2004-08-31 Thread Gerard Samuel
Giorgos Keramidas wrote:
On 2004-08-31 11:15, Gerard Samuel [EMAIL PROTECTED] wrote:
Im trying to rename a few files with the .dist extension.
Im trying -
hivemind# find . -name '*.dist' -exec cp {} `basename {} .dist` \;
And Im getting -
cp: ./html.php.dist and ./html.php.dist are identical (not copied).
cp: ./horde.php.dist and ./horde.php.dist are identical (not copied).
cp: ./motd.php.dist and ./motd.php.dist are identical (not copied).
cp: ./mime_mapping.php.dist and ./mime_mapping.php.dist are identical (not copied).
cp: ./prefs.php.dist and ./prefs.php.dist are identical (not copied).
cp: ./registry.php.dist and ./registry.php.dist are identical (not copied).
cp: ./lang.php.dist and ./lang.php.dist are identical (not copied).
cp: ./mime_drivers.php.dist and ./mime_drivers.php.dist are identical (not copied).
What is wrong with the command that I issued.

The basename command gets expanded by the shell you use *BEFORE* find
has a change to run.
You can try playing tricks with escaping the backquotes, which is
probably going to result very quickly in ugliness like \\\`foo\\\` or
you can use find to generate a list of filenames which will be
processed by the rest of the command-line to spit out the rename
commands, and feed them to sh(1) for execution, i.e.:
$ ls -l
total 0
-rw-rw-r--  1 keramida  wheel  - 0 Aug 31 18:33 koko.dist
-rw-rw-r--  1 keramida  wheel  - 0 Aug 31 18:33 lala.dist
$ find . -name \*.dist | \
  awk '{ printf mv \%s\ `basename \%s\ .dist`\n,$0,$0; }'
mv ./lala.dist `basename ./lala.dist .dist`
mv ./koko.dist `basename ./koko.dist .dist`
$ find . -name \*.dist | \
  awk '{ printf mv \%s\ `basename \%s\ .dist`\n,$0,$0; }' | sh
$ ls -l
total 0
-rw-rw-r--  1 keramida  wheel  - 0 Aug 31 18:33 koko
-rw-rw-r--  1 keramida  wheel  - 0 Aug 31 18:33 lala
Thanks for the explanation...
___
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to [EMAIL PROTECTED]