gpt4 book ai didi

linux - Bash 循环 - 为目录中的每个现有 txt 文件创建一个文件夹

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:56 24 4
gpt4 key购买 nike

我想整理目录中的文本文件。我试图通过 bash 为每个文件创建一个目录来做到这一点。当我将文件移动到其各自的新文件夹时,我想修改原始 filename 并创建一个标记为 info.txt 的附加文本文件,其中包含原始文件名(this文件也放在新文件夹中)。文件名从 xxx-file_name-aa1.txt 更改为 xxx-aa1.txt。第一个和最后一个 - 之间的任何内容都被删除。该文件夹与文件 xxx-aa1 同名。

test.sh(我的 sed 语句去除空白并将所有内容变为小写,除了最后一个 -

之后的任何内容
FILE_PATH="/media/sf_linux_sandbox/txt_files/"
while read -r file; do
#sed statement empty
new_name=$(echo "$file" | sed 's/^\(.*\)\(-[^-]*\)$/\L\1\E\2/; s/ *- */-/; s/^\(.*\) \+- *\([^-]*\)$/\1-\2/; s/ /_/g')
mv "$file" "$new_name"
done < <(find $FILE_PATH -maxdepth 1 -type f -name '*.txt')

输入:

|-- ./
| |-- xxxx-test_file1-aa1.txt
| |-- xxxx-test_file2-bb2.txt

期望的输出:

|-- ./
| |-- xxxx-aa1
| |--xxx-aa1.txt
| |--info.txt // contains name 'test_file1'
| |-- xxxx-bb2
|--xxx-bb2.txt
|--info.txt // contains name 'test_file2'

电流输出

|-- ./
| |-- xxxx-test_file-aa1
| |--xxxx-test_file-aa1.txt
| |-- xxxx-test_file-bb2
|--xxxx-test_file-bb2.txt

最佳答案

您实际上可以在 Bash 本身中完成所有这些操作。

因为你有 -maxdepth 1 看起来你可以只使用通配符循环而不是 find 所以我也重构了它。

FILE_PATH="/media/sf_linux_sandbox/videos/"
for file in "$FILE_PATH"/*.mp4; do
tmp=${file#*-}; head=${file%-"$tmp"}
mid=${tmp%-*}; tail=${tmp#"$mid"-}
base="${head,,}-${tail,,}"
dir=${base%.mp4}
mkdir -p "$dir"
mv "$file" "$dir/$base"
echo "$mid" >"$dir"/info.txt
done

简而言之,${var#prefix} 扩展为 var 的值,删除了 prefix,并且 ${var% suffix} 相应地使用后缀执行相同的替换。最后,${var,,} 生成值的小写版本。然后我们简单地将这些部分组装成你想要的文件名结构。

关于linux - Bash 循环 - 为目录中的每个现有 txt 文件创建一个文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26540919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com