![](/img/trans.png)
[英]Linux - How to rename files in batch while removing pattern in filename
[英]Linux batch copy files into directories based on filename pattern
我有將近500個具有以下文件名結構的pdf文件的列表:
XXXX-YYYY-MM-DD.pdf
其中XXXX
是始終由“-”定界的可變長度數字代碼( 1到4位數字 ),例如:
51-2016-08-22.pdf
776-2016-08-22.pdf
3881-2016-08-22.pdf
4-2016-08-22.pdf
2860-2016-08-22.pdf
目標是將每個文件復制到其自己的目錄中,並像模式一樣命名目錄(即,文件776-2016-08-22.pdf進入目錄776)。 如何使用awk或sed分隔可變長度字段?
這是我的代碼:
for f in *.pdf
do
FOLDERNAME=`echo $f| awk (awk or sed missing code here)`
mkdir /my/dir/structure/$FOLDERNAME
cp $f /my/dir/structure/$FOLDERNAME/
done
謝謝你的支持。
您可以使用:
for f in *.pdf; do
d="${f%%-*}"
mkdir -p "$d" && cp "$f" "$d"
done
正如ed-morton正確指出的那樣, 不建議使用此解決方案,因為它在許多情況下都會失敗。 請遵循https://stackoverflow.com/a/39089589/3834860
保留此答案以供參考。
awk -F '-'
指定分隔符, '{print $1}'
指定分隔符之前的第一個元素。
for f in *.pdf
do
FOLDERNAME=`echo $f| awk -F '-' '{print $1}'`
mkdir /my/dir/structure/$FOLDERNAME
cp $f /my/dir/structure/$FOLDERNAME/
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.