如何为父目录中的每个文件创建一个目录

如何为父目录中的每个文件创建一个目录

我有父文件夹,在这个文件夹中有 4 个文件

ParentFolder
      File1.txt
      File2.txt
      File3.txt
      File4.txt

我想在父文件夹内创建子文件夹并携带文件名,然后将每个文件移动到带有其名称的文件夹内,如下所示:

ParentFolder
    File1          
      File1.txt
    File2          
      File2.txt
    File3          
      File3.txt
    File4          
      File4.txt

我怎样才能在批处理或 tsch 脚本中做到这一点?我尝试过这个脚本:

#!/bin/bash
in=path_to_my_parentFolder
for i in $(cat ${in}/all.txt); do
cd ${in}/${i} 
ls > files.txt
for ii in $(cat files.txt); do
mkdir ${ii}
mv ${ii} ${in}/${i}/${ii} 
done     
done

答案1

你把这件事想得太复杂了。我不明白你想做什么all.txt。要枚举目录中的文件,不要调用ls:这更复杂并且无论如何都不能可靠地工作。用一个通配符模式

.txt要去除文件名末尾的扩展名 ( ),请使用后缀去除功能变量替换始终在变量替换两边加上双引号

cd ParentFolder
for x in ./*.txt; do
  mkdir "${x%.*}" && mv "$x" "${x%.*}"
done

答案2

您可以使用而不是循环find

find ParentFolder/* -prune -type f -exec \
  sh -c 'mkdir -p "${0%.*}" && mv "$0" "${0%.*}"' {} \;

答案3

或者你真的可以让它变得简单。使用basename,部分coreutils

cd ParentFolder &&
for i in ./*.txt 
 do   
    d=$(basename "$i" .txt)   
    mkdir "$d" && mv "$i" "$d" 
 done

相关内容