find /volume1/file/* -type f \( -name "*DF*" -a -name "*LIVE*" \) -print0 | while IFS= read -d '' file
do
# extract the name of the directory to create
dirName="${file%.E*}"
count=$(find "$file" -type f | wc -l;)
# create the directory if it doesn't exist
[[ ! -d "$dirName$count" ]] && mkdir "$dirName$count"
mv "$file" "$dirName$count"
done
你好呀,
我正在使用另一个编码器的shell脚本,但我修改了它,因为我想添加更多功能,但它不起作用
修改部分count=$(find "$file" -type f | wc -l;)
例如,我的Linux硬盘中有大约10,000个文件,在这10,000个文件中,我读取“.E”之前的文件标题,并以该标题创建一个目录来移动文件。在这里,我想将该目录中的文件数量放入目录名称中。
EX)
artist.E01.DF.LIVE
artist.E02.DF.LIVE
artist.E03.DF.LIVE
artist.E04.DD.LIVE
directory name = "artist3"
我想这样做,但是使用我修改的脚本,只计算了1
答案1
(1) 您想在哪里搜索什么?find "$file" -type f
查找名为 的路径下的所有文件$file
。但由于这只是一个文件,因此只能找到一次,因此您得到的计数总是为 1。
(2) 您可能打算搜索名为$file
under 的文件/volume1/file/
,但请注意,如果有四个文件,那么在移动第一个文件后,将只剩下三个,因此您将拥有不同的目录名称。
您可能想要类似的东西(未经测试):
find /volume1/file/* -type f \( -name "*DF*" -a -name "*LIVE*" \) -print0 | while IFS= read -d '' file
do
# extract the name of the directory to create
dirName="${file%.E*}"
if test -d "$dirName"*; then
dirName="$dirName"*
else
count=$(find /volume1/file/* -name "$dirName*" -type f | wc -l)
dirName="$dirName$count"
mkdir "$dirName"
fi
mv "$file" "$dirName"
done