Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
Bash 按名称排序和移动文件(ksh)_Bash_Unix_Ksh - Fatal编程技术网

Bash 按名称排序和移动文件(ksh)

Bash 按名称排序和移动文件(ksh),bash,unix,ksh,Bash,Unix,Ksh,这是目前的命令 #/root/scripts/.sh$c$targetdir\u dir/$i 我需要将文件不仅移动到targetdir,而且移动到该目录的某个子文件夹 例如: emea_targetdir usa_targetdir 如果文件名是region1\u filename\u extension脚本将其移动到targetdir\u region1,如果文件名是region2\u filename\u extension,则将其移动到targetdir\u region2,依此类推。

这是目前的命令

#/root/scripts/.sh$c$targetdir\u dir/$i

我需要将文件不仅移动到
targetdir
,而且移动到该目录的某个子文件夹

例如:

emea_targetdir
usa_targetdir

如果文件名是
region1\u filename\u extension
脚本将其移动到
targetdir\u region1
,如果文件名是
region2\u filename\u extension
,则将其移动到
targetdir\u region2
,依此类推。

尝试以下ksh脚本:-

#!/bin/ksh

files=`ls  *.txt`
for filename in $files
do
    dir_name=`echo $filename | cut -d'_' -f1`
    mkdir -p $dir_name
    mv $filename $dir_name/$xx
done
步骤:-

  • 此脚本将从当前目录中读取所有.txt文件
  • 然后用“\u1”字符拆分文件名
  • 之后,如果dir不存在,它将创建一个包含名称第一部分的dir
  • 然后它将按照文件名的第一部分将文件复制到目录中

  • 这是一个基本的匹配和移动脚本,如果您想获得进一步的帮助,您应该粘贴一些代码,显示所需的输入和输出,尽可能少地重新编写问题hi,欢迎使用堆栈溢出。有关如何提问和相应更新问题的详细信息,请参阅链接。简单的
    mv
    命令就足够了;你需要证明为什么不是。您可以使用
    mv
    重命名文件,部分重命名操作可以将文件放置在选定的目录中。你问题中的“排序”似乎不是指“对文件应用
    sort
    命令”,而是指“将文件放在正确的子目录中”。更新了原始帖子,希望它会更合理。我必须保留文件名,因为即将发布的脚本依赖于此。。。很多。目录都存在,只需将文件抛出到正确的位置
    ksh
    支持数组:使用它们。不要使用
    ls
    @fba,上面的脚本不会重命名文件,它只是将它们复制到特定的目录。而且,它也只在给定名称的目录不存在时创建目录。如果已经有一个名为dir的目录。它不创建目录。我可以将它与多个文件名一起使用吗?我的意思是我能列出所有地区的名字吗?(我无法测试我现在做什么,需要等到明天,但我希望到那时它或多或少“在一起”)。谢谢你的帮助too@fba,是的,它可以用于具有不同名称的多个文件。您可以进行测试运行。1.创建包含要管理的类似文件的目录副本。2.然后,将脚本放在新复制的同一目录中。3.然后,在新创建的目录中运行脚本。4.观察结果,如果一切正常,则在real data文件夹上运行。