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
こんにちは、
他のエンコーダのシェルスクリプトを使用していますが、さらに多くの機能を追加したかったのですが、うまくいかなかったので修正しました。
部品修正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つのファイルなので、一度だけ見つけることができるので、取得する数は常に1です。
$file
(2) 下の名前のファイルを検索しようとするかもしれませんが、/volume1/file/
ファイルが 4 つなら、最初のファイルを移動した後は 3 つだけ残るので、ディレクトリ名が変わります。
(テストされていない)次のようなことをしたいかもしれません。
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