2013-08-06 21 views
-2

我的桌面上有一个名为“images”的文件夹。在Mac上移动和重命名文件

里面有一堆子文件夹叫做“Flower_Shape”,“Smile_Shape”,“Dog_Shape”等等,每个文件夹包含3个图像“Variant1.PNG”,“Variant2.PNG”和“Variant3 .PNG“然后是被称为各种各样的事情,但他们不以.png结束一些其他的文件格式,他们喜欢的事情结束” .PSD” ......

我怎么能采取所有这些数以百计的内容并将它们全部移动到1个文件夹中,同时将名称从“Variant1.png”更改为所调用文件夹的名称(例如文件夹“Flower_Shape”中的“Variant1.png”将被重新命名命名为“Flower_Shape-Variant1.png”),然后删除每个不以“.png”结尾的文件。

我的第一个主要问题是我会用什么语言来做这样的事情?它会是PERL吗? 建立之后,有没有人有任何提示如何去做这个......我假设只是一个for循环与一些if语句应该是它真正需要的,但我什么都不知道perl(或任何其他语言处理在我自己的计算机上更改文件的问题)

谢谢!

回答

0

我能够这个使用此代码(和改变“水珠”函数内的值以不同级别的///手动

#!/usr/bin/perl 

foreach my $files (glob ('*/*/*')) { 
    use strict; 
    use File::Basename; 
    use Cwd 'abs_path'; 

    my $f = "$files"; 
    my $d = basename(dirname(abs_path($f))); 

    my($file, $dir, $ext) = fileparse($files); 

    my $initialName = "$dir$file"; 
    my $finalName = "$dir$d$file"; 

    print("$initialName --> $finalName \n"); 

    rename($initialName, $finalName); 
} 

然后,它是那样简单实现用移动功能将文件移动到新文件夹中,如下所示:

#!/usr/bin/perl 

foreach my $files (glob ('*/*/*')) { 
    use strict; 
    use File::Basename; 
    use Cwd 'abs_path'; 
    use File::Copy; 

    my $f = "$files"; 
    my $d = basename(dirname(abs_path($f))); 

    my($file, $dir, $ext) = fileparse($files); 

    my $initialLocation = "$dir$file"; 
    my $finalLocation = "AllFiles/$file"; 

    print("$finalLocation\n"); 

    move($initialLocation,$finalLocation); 
} 
+0

[不要在你的帖子中使用签名,称呼或标语]( http://stackoverflow.com/faq) – meagar

1

你必须File::FindFile::Copy结合起来,以达到这些要求

+0

Soo ...那是PERL吗? –

+0

@AlbertRenshaw是的。虽然语言是大写的“Perl”。 – amon

+1

它从来不是“PERL”。语言是“Perl”,语言解释器是“perl”。 – JRFerguson

2

的Mac OS X自带的脚本语言的全品种。它配备了Perl,Python,PHP,RubyBASH

Mac OS X还附带Automator

您应该选择什么?

  • 如果你真的对学习编程感兴趣,我会建议你从Bash开始。 BASH就是所谓的命令shell。如果您在提示中键入命令,它将被执行。 Unix shell是一个强大的工具,BASH shell包含了很多可以使用的控制结构。在BASH中,您可以使用find命令和mv命令并编写一个循环来执行您想要的操作。

    Shell脚本的功能有限。他们并不认为是全功能语言,不会为此道歉。如果您需要多于几十行或更复杂的控制,则应该切换为脚本语言。

  • 我是一名Perl程序员,但如果您真的有兴趣学习如何编程,学习Python,我会推荐。 Python可能是最流行的语言,它的使用当然在增长。

  • Perl是一种很好的语言,因为它的许多语法结构来自shell脚本语言。尽管你听说过,Perl仍然是一种非常流行的语言。我发现人们比Python更快地选择Perl,因为它的语法规则更宽松,而且它不必面向对象。这也是Perl的一个主要问题。大多数Perl程序员从来没有超过基本的黑客阶段,而Perl因为庞大的Perl脚本数量而成为难以维护的语言。

  • Ruby并没有Perl或Python那么受欢迎,但它有粉丝。Ruby的强大功能叫做Ruby on RailsRails是一个编程框架,允许您快速构建基于Web的应用程序。你首先应该学习Ruby,然后学习Rails组件。

  • PHP的使用是将网络连接在一起的粘合剂。近年来,随着新的Web开发平台的出现,我相信它的受欢迎程度一直在下降。 PHP是编程的暴民规则。与其他所有语言不同,它没有一个冠军塑造语言,并且发展了很多碎片。这是马虎,可能很难维护。

    尽管如此,它仍然是很多基于web的论坛和内容管理系统(如Joomla)的基础。毕竟,PHP被设计为生活在网页内部。

  • 如果你不想学习脚本编程,你应该尝试Automator。它带有一个图形用户界面,可以让你构建程序来完成各种任务。进入Automator的人已经做了一些惊人的事情。

无论你选择,你可以找到一些教程和信息在网络上,但如果你真的想学习,你应该得到一些很好的手册。 O'Reilly and Associates与计算机和互联网有着悠久的历史渊源。 Tim O'Reilly(公司背后的大脑)自1978年以来一直在制作电脑手册。几乎我所有的书都是O'Reilly的书籍。另一个是Manning,还有几十个。在亚马逊驱使它们全部歇业之前,去一家真正的书店去仔细阅读他们的书架,寻找你喜欢的东西。

+0

谢谢:)我实际上已经用多种语言编写了多年,我从来没有做过像Perl,Ruby,Python,Visual Basics等等任何东西......我现在检查出perl :)到目前为止我已经能够让它做一些我喜欢的事情,但我仍然在研究如何让循环做我想让他们做的事情:) –

0

如果你使用perl,你应该看看Path :: Class和File ::: Copy。这将处理你的路径解析。你想要遍历文件系统(路径::类:: DIR->接下来将是你的朋友在这里),建立一个目标文件的东西,如:

my $curr_file = file('whatever_path...'); 
my $dest_dir = dir('some other path...'); 
my $dest_file = file($dest_dir, $curr_file->dir->basename . '-' . $curr_file->basename); 

然后使用文件::复制到移动:

move($curr_file, $dest_file); 

首先查找这些方法/子程序及其用法;那么你只需要编码迭代。