我有一个文件列表,例如(pippo1.txt,pippo2.txt,pippo3.txt,ecc)在名为“test”的主文件夹中。
我想创建一些等于文件数量且名称相同的文件夹。例如,如果我有一个名为pippo1.txt的文件,我想创建一个名为pippo1的文件夹,然后我想将.txt文件分别复制到名为pippo1,pippo2,pippo3的文件夹中,以便pippo1.txt保留在文件夹pippo1,pippo2.txt将保留在文件夹pippo2 ecc中。
我有14469个files.txt在14469个文件夹中分配。
如何做到这一点?
答案 0 :(得分:1)
在Bourne shell中:
for i in *.txt
do
dir=$(echo $i | sed 's/.txt$//')
mkdir "$dir"
cp "$i" "$dir"
done
在bash
中,您可以${}
使用sed
构建{<1}}:
for i in *.txt
do
dir=${i%.txt}
mkdir "$dir"
cp "$i" "$dir"
done
如果您要移动文件而不是复制文件,只需使用mv
代替cp
。
如果您认为列表对于命令行而言太大(但在您的情况下似乎不会太大),则可以使用while...read
代替for
:
find . -maxdepth 1 -name '*.txt' | while read i
do
dir=${i%.txt}
mkdir "$dir"
cp "$i" "$dir"
done
答案 1 :(得分:0)
for file in *.txt; do
newdir="${file%.txt}"
mkdir -p "$newdir"
mv "$file" "$newdir"
done
如果您想在“主目录”中保留pippo1.txt
的副本,请使用cp
代替mv
。 E.g:
cp "$file" "$newdir"