Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 用于重新命名文件夹和子文件的Shell脚本_Linux_Bash_Shell - Fatal编程技术网

Linux 用于重新命名文件夹和子文件的Shell脚本

Linux 用于重新命名文件夹和子文件的Shell脚本,linux,bash,shell,Linux,Bash,Shell,你好 我需要将786个文件夹移动到另一个位置,每个文件夹中至少有一个文件。大多数文件夹在我需要它们移动的位置都有相同的命名文件夹,而且它们内部也有相同的命名文件。例如,必须移动文件夹33。文件夹层次结构如下所示:/33/1.TIF。在我需要移动的位置,该文件夹是同一文件夹,其中包含相同的命名文件。如果我尝试将此文件夹移动到那里,它们将相互冲突。所以我需要逃避它。 我有一个CSV文件,其中包含文件夹的旧名称和新名称。我不熟悉linux和shell本身,所以我真的不知道从哪里开始。关于合并目录,有很

你好

我需要将786个文件夹移动到另一个位置,每个文件夹中至少有一个文件。大多数文件夹在我需要它们移动的位置都有相同的命名文件夹,而且它们内部也有相同的命名文件。例如,必须移动文件夹33。文件夹层次结构如下所示:/33/1.TIF。在我需要移动的位置,该文件夹是同一文件夹,其中包含相同的命名文件。如果我尝试将此文件夹移动到那里,它们将相互冲突。所以我需要逃避它。
我有一个CSV文件,其中包含文件夹的旧名称和新名称。我不熟悉linux和shell本身,所以我真的不知道从哪里开始。

关于合并目录,有很多方法。困难在于检查目标目录中是否已存在同名文件,然后增加源文件的名称以避免覆盖目标

鉴于您的命名约定为.TIF,实现此目的的一种方法是扫描目标目录中的文件并确定最大值。您还需要扫描源文件,以考虑目标中不存在源文件的情况

如果文件集有最大值,只需在每个文件上循环,检查它是否已经存在,如果已经存在,则在目标目录中将文件从当前文件移动到+max。如果文件不存在,只需移动它。这同样适用于目标目录结构中不存在的源目录-只需移动它

将所有部分放在一起,您可以执行与以下类似的操作,其中脚本将旧目录名、新目录名和ext default TIF作为参数:

该脚本将产生以下结果:您可以删除printf语句,或者将输出重定向到/dev/null以抑制文本

$ bash mvoldnew.sh old new
mv old/24 new/24
mv old/22/1.TIF new/22/5.TIF
mv old/22/2.TIF new/22/6.TIF
mv old/22/3.TIF new/22/7.TIF
mv old/22/4.TIF new/22/4.TIF
mv old/23/1.TIF new/23/6.TIF
mv old/23/2.TIF new/23/7.TIF
mv old/23/3.TIF new/23/8.TIF
mv old/23/4.TIF new/23/4.TIF
mv old/23/5.TIF new/23/5.TIF
现在,新目录树包含以下内容:

$ tree new
new
├── 22
│   ├── 1.TIF
│   ├── 2.TIF
│   ├── 3.TIF
│   ├── 4.TIF
│   ├── 5.TIF
│   ├── 6.TIF
│   └── 7.TIF
├── 23
│   ├── 1.TIF
│   ├── 2.TIF
│   ├── 3.TIF
│   ├── 4.TIF
│   ├── 5.TIF
│   ├── 6.TIF
│   ├── 7.TIF
│   └── 8.TIF
└── 24
    ├── 1.TIF
    └── 2.TIF

如果您有任何问题,或者我误解了您的澄清,请仔细查看并告诉我。

从这里开始将是一个好主意。如果您从未做过任何bash编程,那么一个教程可能会有所帮助。首先,制作一些源目录和目标目录的副本。了解一些shell命令以及如何将它们与管道操作符组合。尝试尝试使用这一小部分文件和文件夹,这样可以避免1覆盖重要文件和/或2在目标目录中创建大量冗余副本。在我们提供帮助之前,我们需要知道是否要用相同的名称覆盖目标文件,或者您想保留现有的目标文件,并将新文件移动到相同的位置,后缀为/33/1.TIF_001?我想您的问题的答案是mv。您的问题暗示您正在尝试将/a/b/c/THE_DIR重命名为/a/b/c/THE_DIR2,mv将这样做。如果您试图将/a/b/c/THE_DIR移动到/d/e/f/THE_DIR,那么假设/d/e/f存在并且您有权限,那么mv将再次工作。如果要将/a/b/c/U目录移动到/a/b/c/d/U目录,需要确保a/b/c/d存在。@DavidC.Rankin假设我有两个文件夹-旧文件夹和新文件夹。在旧文件夹中,我有一个名为1的文件夹,其中包含文件1.TIF、2.TIF。“新建文件夹”具有相同的文件夹,其中包含相同的文件。我希望将旧1中的文件移动到新1中,并重新命名为3.TIF、4.TIF
$ bash mvoldnew.sh old new
mv old/24 new/24
mv old/22/1.TIF new/22/5.TIF
mv old/22/2.TIF new/22/6.TIF
mv old/22/3.TIF new/22/7.TIF
mv old/22/4.TIF new/22/4.TIF
mv old/23/1.TIF new/23/6.TIF
mv old/23/2.TIF new/23/7.TIF
mv old/23/3.TIF new/23/8.TIF
mv old/23/4.TIF new/23/4.TIF
mv old/23/5.TIF new/23/5.TIF
$ tree new
new
├── 22
│   ├── 1.TIF
│   ├── 2.TIF
│   ├── 3.TIF
│   ├── 4.TIF
│   ├── 5.TIF
│   ├── 6.TIF
│   └── 7.TIF
├── 23
│   ├── 1.TIF
│   ├── 2.TIF
│   ├── 3.TIF
│   ├── 4.TIF
│   ├── 5.TIF
│   ├── 6.TIF
│   ├── 7.TIF
│   └── 8.TIF
└── 24
    ├── 1.TIF
    └── 2.TIF