From owner-freebsd-questions@FreeBSD.ORG Tue Aug 31 15:37:43 2004 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id B870D16A4CE for ; Tue, 31 Aug 2004 15:37:43 +0000 (GMT) Received: from rosebud.otenet.gr (rosebud.otenet.gr [195.170.0.26]) by mx1.FreeBSD.org (Postfix) with ESMTP id CBB1443D64 for ; Tue, 31 Aug 2004 15:37:37 +0000 (GMT) (envelope-from keramida@ceid.upatras.gr) Received: from orion.daedalusnetworks.priv (aris.bedc.ondsl.gr [62.103.39.226])i7VFbZ35003558; Tue, 31 Aug 2004 18:37:35 +0300 Received: from orion.daedalusnetworks.priv (orion [127.0.0.1]) i7VFbQf9053293; Tue, 31 Aug 2004 18:37:26 +0300 (EEST) (envelope-from keramida@ceid.upatras.gr) Received: (from keramida@localhost)i7VFbQL7053292; Tue, 31 Aug 2004 18:37:26 +0300 (EEST) (envelope-from keramida@ceid.upatras.gr) Date: Tue, 31 Aug 2004 18:37:26 +0300 From: Giorgos Keramidas To: Gerard Samuel Message-ID: <20040831153725.GA53122@orion.daedalusnetworks.priv> References: <413495FD.10700@trini0.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <413495FD.10700@trini0.org> cc: freebsd-questions@freebsd.org Subject: Re: Renaming files using find X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 31 Aug 2004 15:37:43 -0000 On 2004-08-31 11:15, Gerard Samuel 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