我有100个目录,其文件名为content.html
以及其他文件。
我正在尝试将所有这些content.html
文件复制到1个目录下,但由于它们具有相同的名称,因此会相互覆盖
所以如何在1个目录下重命名和移动所有这些
例如:
./0BD3D9D2-F8B1-4472-95C2-13319650A45C: card.png content.html note.xhtml quickLook.png snippet.txt ./0EA34DB4-CD56-42BE-91DA-F631E44FB6E0: card.png content.html note.xhtml quickLook.png related snippet.txt ./1A33F29E-3938-4C2F-BA99-6B98FD045742: card.png content.html note.xhtml quickLook.png snippet.txt
命令我试过:
将content.html重命名为内容
找到。 -type f | grep content.html |读取f;做mv $ f $ {f / .html /};完成将数字附加到文件名"内容"使其独一无二p> 找到。 -type f | grep内容|读取f;我= 1; echo mv $ f $ f $ i.html; I = I + 1;完成
MacBook-Pro $找到。 -type f | grep内容|读取f;我= 1; echo mv $ f $ f $ i.html; I = I + 1;完成
mv ./0BD3D9D2-F8B1-4472-95C2-13319650A45C/content ./0BD3D9D2-F8B1-4472-95C2-13319650A45C/content1.html
mv ./0EA34DB4-CD56-42BE-91DA-F631E44FB6E0/content ./0EA34DB4-CD56-42BE-91DA-F631E44FB6E0/content1.html
mv ./1A33F29E-3938-4C2F-BA99-6B98FD045742/content ./1A33F29E-3938-4C2F-BA99-6B98FD045742/content1.html
一旦上述步骤成功,我应该能够达到我想要的输出:
找到。 -type f | grep内容|读取f;做mv $ f ../;完成然而,我确信我可以在一步命令中执行此操作,而且我的步骤2也不起作用(递增i)
任何想法为什么step2不起作用?
答案 0 :(得分:1)
bash 脚本:
#!/bin/bash
find . -type f -name content.html | while IFS= read -r f; do
name=$(basename $f)
((++i))
mv "$f" "for_content/${name%.*}$i.html"
done
将for_content
替换为您的目的地文件夹名称
答案 1 :(得分:0)
假设在您的基目录中,您创建了一个名为import json
with open('another.txt') as another:
replacements = dict(line.split() for line in another)
with open('ajson.json') as j:
data = json.load(j)
data = {k: replacements.get(v, v) for k,v in data.items()}
with open('ajson_new.json', 'w') as j:
json.dump(data, j)
的文件夹用于存储
final
个文件,然后执行以下操作
content.html
最后,您将以find . -path ./final -prune -o -name "content.html" -print0 |
while read -r -d '' name
do
mv "$name" "./final/content$(mktemp -u XXXX).html"
# mktemp with -u option just creates random characters, or it is just a dry run
done
格式获取./final
文件夹下的所有content.html文件,其中contentXXXX.html
是随机字符。
注意:XXXX
中的{/ strong> -path ./final -prune -o
会阻止它降级到我们的结果文件夹。
答案 2 :(得分:0)
文件的inode应该是唯一的,因此您可以使用以下内容:
find $(pwd) -name "content.html" -printf %f" "%i" "%p"\n" | awk '{ system("mv "$3" <directorytomoveto>"$2$1) }'
答案 3 :(得分:0)
我会用这样的东西:
find . -type f -name 'test' | awk 'BEGIN{ cnt=0 }{ printf "mv %s ./output-dir/content_%03d.txt\n", $0, cnt++ }' | bash;
您可以将./output-dir/替换为目标目录
示例:
[root@sl7-o2 test]# ls -R
.:
1 2 3 output-dir
./1:
test
./2:
test
./3:
test
./output-dir:
[root@sl7-o2 test]# find . -type f -name 'test' | awk 'BEGIN{ cnt=0 }{ printf "mv %s ./output-dir/content_%03d.txt\n", $0, cnt++ }' | bash;
[root@sl7-o2 test]# ls ./output-dir/
content_000.txt content_001.txt content_002.txt
答案 4 :(得分:0)
您可以使用shopt -s globstar
递归获取所有content.html
个文件,然后使用循环重命名它们:
#!/bin/bash
set -o globstar
counter=0
dest_dir=/path/to/destination
for f in **/content.html; do # pick up all content.html files
[[ -f "$f" ]] || continue # skip if not a regular file
mv "$f" "$dest_dir/content_$((++counter).html"
done